Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fel.oliveiraa

FOREIGN KEY não funciona no PHPMYADMIN?

Recommended Posts

Coloquei o código:

 

FOREIGN KEY (codigo) REFERENCES inscricoes(codigo) ON DELETE RESTRICT

 

 

Mas quando eu apago da tabela de inscrições ele apaga normal, sem dar erro mesmo que uma inscrição esteja usando o codigo, também tentei:

 

FOREIGN KEY (codigo) REFERENCES inscricoes(codigo) ON DELETE CASCADE

 

Para ele apagar automático e tb não funciona, ele apaga só a inscrição, alguém sabe o pq?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabendo que tabelas InnoDB, Falcon e BDB possuem integridade referencial e MyISAM não, segue o exemplo:

 

root@wagnerbianchi:~# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with; or \g.
Your MySQL connection id is 47
Server version: 5.1.32-0.dotdeb.1 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test
Database changed

mysql> create table t_a (id int primary key, nome char(20)) engine=innodb;
Query OK, 0 rows affected (0,01 sec)

mysql> create table t_b (id int primary key) engine=innodb;
Query OK, 0 rows affected (0,01 sec)

mysql> alter table t_b add foreign key (id) references t_a(id) on delete cascade on update cascade;
Query OK, 0 rows affected (0,01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into t_a set id=1, nome='Wagner Bianchi';
Query OK, 1 row affected (0,00 sec)

mysql> insert into t_b set id=1;
Query OK, 1 row affected (0,01 sec)

mysql> select * from t_b;
+----+
| id |
+----+
|  1 | 
+----+
1 row in set (0,00 sec)

mysql> delete from t_a;
Query OK, 1 row affected (0,00 sec)

mysql> select * from t_b;
Empty set (0,00 sec)

No exemplo acima, criamos duas tebelas InnoDB, e atribuimos a FK entre os campos id da tabela t_a e o campo id da tabela t_b. Inserimos uma linha em t_a e levamos o valor da coluna id desta linha para a tabela t_b. Ao deletar o registro em t_a, automaticamente, todas linhas que possuírem tal id em t_b serão excluídas devido a atribuição da propriedade ON DELETE CASCADE contida na criação da FK.

 

Caso se tente inserir na coluna FK um valor que não esteja cadastrado na tebal PAI (t_a), receberemos uma mensagem de erro, como segue:

 

mysql> insert into t_a set id =1, nome='Wagner Bianchi';
Query OK, 1 row affected (0,00 sec)

mysql> insert into t_b set id =2;
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`t_b`, CONSTRAINT `t_b_ibfk_1` FOREIGN KEY (`id`) REFERENCES `t_a` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
mysql>

Bom, a resposta ficou meio grande mas esses conceitos e habilidades são extremamente básicos.

 

Happy MySQL'ing!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.