Конфликт ограничений внешнего ключа MySQL - PullRequest
1 голос
/ 31 июля 2009

Привет всем, у меня есть следующая таблица 'users' в 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

У меня есть 'регион', заданный в качестве внешнего ключа для таблицы регионов - region.region '

Обратите внимание, что users.region объявлен как NULL. У меня сложилось впечатление, что в MySQL ограничение внешнего ключа применяется ТОЛЬКО, если ключ установлен как NOT NULL.

Однако, когда я пытаюсь вставить пользователя с NULL-регионом в мое PHP-приложение, я получаю следующую ошибку:

 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)

НО, если бы я добавил этого пользователя вне моего PHP-приложения, например в phpMyAdmin, это позволило бы мне.

Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 31 июля 2009

Ваше приложение помещает не NULL значение в region.

Включите журнал запросов и посмотрите, что именно ваш PHP пытается вставить в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...