Нарушение ограничения на вставке - PullRequest
0 голосов
/ 06 августа 2011

со следующими таблицами

CREATE TABLE `Play` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `room_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_FEBB7184A76ED395` (`user_id`),
  KEY `IDX_FEBB718454177093` (`room_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `User` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `nickname` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_2DA17977F85E0677` (`username`),
  UNIQUE KEY `UNIQ_2DA17977A188FE64` (`nickname`),
  UNIQUE KEY `UNIQ_2DA17977E7927C74` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `User` VALUES(1, 'user', 'nickname', 'user@user.de');

CREATE TABLE `Room` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `Room` VALUES(1);

ALTER TABLE `Play`
  ADD CONSTRAINT `play_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`),
  ADD CONSTRAINT `play_ibfk_2` FOREIGN KEY (`room_id`) REFERENCES `Room` (`id`);

И пытается выполнить следующую инструкцию

INSERT INTO `Play` (`id` ,`user_id` ,`room_id`) VALUES (NULL ,  '1',  '1')

Я получаю ошибку

#1452 - Cannot add or update a child row: a foreign key constraint fails
(`play`, CONSTRAINT `play_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`))

Оба набора данных, # 1 пользователя и # 1 комнаты существуют в базе данных. Как это может потерпеть неудачу? Я хорошо знаком с SQL, но понятия не имею, в чем заключается ошибка в этом случае ...

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Исправлено.Эта проблема возникала только при использовании MySQL 5.5.9, InnoDB и Mac OS X 10.6

См .: Ошибка MySQL # 60309

Я изменил .conf MySQL добавить эту строку:

[mysqld]
lower_case_table_names=1

И это работает сейчас.В любом случае, спасибо за вашу помощь.

0 голосов
/ 06 августа 2011

Проблема заключается только в том порядке, в котором вы выполняете запросы. Таблицы «Пользователь» и «Комната» должны быть определены перед созданием для них ограничения внешнего ключа.

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