MySQL restrição de chave externa Confusão
-
06-07-2019 - |
Pergunta
Olá a todos, eu tenho mesa os seguintes 'utilizadores' no MySQL:
CREATE TABLE `users` (
`uid` int(11) NOT NULL auto_increment,
`fname` varchar(50) NOT NULL,
`lname` varchar(50) NOT NULL,
`role` varchar(75) NOT NULL,
`region` tinyint(4) unsigned default NULL,
`username` varchar(25) NOT NULL,
`password` varchar(75) NOT NULL,
`new_pass` varchar(5) default NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `username` (`username`),
KEY `role` (`role`),
KEY `region` (`region`),
CONSTRAINT `users_ibfk_3` FOREIGN KEY (`role`) REFERENCES `role` (`role`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8
Eu tenho 'região' definido como uma chave estrangeira para uma tabela região - region.region '
Note, que users.region é declarado como NULL. Fiquei com a impressão de que no MySQL, um contstraint chave estrangeira é aplicada somente se a chave é definida como NOT NULL.
No entanto, quando tento inserir um usuário com uma região NULL na minha aplicação PHP, eu recebo o seguinte erro:
ERROR: Cannot add or update a child row: a foreign key constraint fails (`reslife4/users`, CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE)
Mas, se eu fosse para adicionar este usuário fora da minha aplicação PHP, por exemplo, no phpMyAdmin, ele me permitiria.
Alguém sabe o que está acontecendo?
Solução
A sua aplicação coloca um valor não-NULL
em region
.
Ativar log de query e ver o que exatamente suas tentativas PHP
para inserir na tabela.