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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top