簡體   English   中英

插入時違反約束

[英]Constraint violation on insert

與下表

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非常熟悉,但是我不知道在這種情況下的錯誤是什么...

修復。 這個問題只有在使用MySQL 5.5.9,InnoDB和Mac OS X 10.6時才會出現

請參閱: MySQL錯誤#60309

我更改了MySQL的.conf以添加以下行:

[mysqld]
lower_case_table_names=1

現在就可以了。 還是要謝謝你的幫助。

問題僅在於您執行查詢的順序。 在表“用戶”和“房間”上創建外鍵約束之前,必須先對其進行定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM