Ir para conteúdo
Fórum Script Brasil
  • 0

on delete cascate


Carlos Rocha

Pergunta

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 para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...