Jump to content
Fórum Script Brasil
  • 0

on delete cascate


Carlos Rocha

Question

Feliz Ano Novo pessoal!

Gostaria de uma orientação com on delete cascate.

Tenho uma tabela de categorias de produtos na qual gostaria de fazer o seguinte: toda vez que eu deletar uma categoria, gostaria de deletar todos os produtos quem tem esta categoria por sua categoria.

Segue as tabelas:

CREATE TABLE categorias (
  id_categorias int(4) unsigned NOT NULL AUTO_INCREMENT,
  nome_categorias varchar(100) NOT NULL DEFAULT '',
  imagem_categorias char(36) NOT NULL DEFAULT '',
  PRIMARY KEY (id_categorias)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;


CREATE TABLE produtos (
  id_produtos int(4) unsigned NOT NULL AUTO_INCREMENT,
  id_categorias_produtos int(4) NOT NULL DEFAULT '0',
  nome_produtos varchar(50) NOT NULL DEFAULT '',
  imagem_produtos char(36) DEFAULT NULL,
  referencia_produtos varchar(10) NOT NULL DEFAULT '',
  descricao_produtos text NOT NULL,
  bloqueio_produtos char(1) NOT NULL DEFAULT '',
  PRIMARY KEY (id_produtos)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;

Como eu poderia fazer isso na estrutura da tabela?

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0
Feliz Ano Novo pessoal!

Gostaria de uma orientação com on delete cascate.

Tenho uma tabela de categorias de produtos na qual gostaria de fazer o seguinte: toda vez que eu deletar uma categoria, gostaria de deletar todos os produtos quem tem esta categoria por sua categoria.

...

Como eu poderia fazer isso na estrutura da tabela?

ALTER TABLE produtos 
ADD CONSTRAINT `produtos_FK_001` FOREIGN KEY (`id_categorias_produtos`) REFERENCES `categorias` (`id_categorias`)
   ON DELETE CASCADE;

Link to comment
Share on other sites

  • 0
Só uma dúvida:

Essa parte é assim mesmo?

`produtos_FK_001`

Pois não há este campo na tabela.

Não é campo. É o padrão que eu uso para nomear este relacionamento.

produtos = nome da tabela

FK = o índice é um Foreign Key

001 = é o primeiro relacionamento (número sequencial que eu uso para documentar) nesta tabela

Link to comment
Share on other sites

  • 0
Então quer dizer que tem que ser criado um novo campo?

O erro 150 para alter table quando da criação de um foreign key informa qua não foi possível a criação da constraint.

Observando as estruturas publicadas no primeiro post verifiquei que o campo abaixo:

id_categorias_produtos int(4) NOT NULL DEFAULT '0',
foi declarado de forma indevida para possibilitar a criação da constraint. O campo deve ser NOT NULL sem valor default. Isto implicará que só serão aceiros os registros que satisfizerem a condição da constraint. Como corrigir: Primeiro alterar o campo em questão:
ALTER TABLE produtos
MODIFY id_categorias_produtos int(4) NOT NULL

O Segundo passo é colocar valores válidos no campo id_categorias_produtos (valores que constem na tabela categorias) para os registros que tiverem com valor 0(zero) neste campo.

Só depois de ter feito os passos acima é que você poderá criar o relacionamento entre as tabelas.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...