我是MySql的新手。 我有一个问题,插入到表与foriegnKeys到另一个表。下面提到的是父表和子表的语法。
===家长====
CREATE TABLE `userTable_temp` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`contactNum` varchar(64) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `contactNum` (`contactNum`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
====孩子=====
CREATE TABLE `friendTable_temp` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`userId` int(32) DEFAULT NULL,
`friendId` int(32) DEFAULT NULL,
`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uc_test` (`userId`,`friendId`),
KEY `friendId` (`friendId`),
CONSTRAINT `friendTable_temp_ibfk_2` FOREIGN KEY (`friendId`) REFERENCES `userTable` (`id`),
CONSTRAINT `friendTable_temp_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `userTable` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
我能够将一些记录插入到friendTable_temp中,但在第4次插入后,我总是会收到以下错误
"Cannot add or update a child row: a foreign key constraint fails (`contacts_db`.`friendTable_temp`, CONSTRAINT `friendTable_temp_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `userTable` (`id`))"
发生此问题时,我在UserTable_temp
中有以下数据的MySQL>从userTable_temp中选择id,contactNum;
+ ---- + --------------- +
| id | contactNum |
+ ---- + --------------- +
| 1 | 123455677 |
| 2 | 56465465464 |
| 3 | 567576567 |
| 4 | 1231231231 |
| 5 | 35453453454 |
| 6 | 45645645645 |
+ ---- + --------------- +
6行(0.00秒)
当我尝试这样做时,会发生上述错误
插入friendTable_temp(userId,friendId)值(6,1);
请你帮我找出我做错了什么?
注意: 插入friendTable_temp(userId,friendId)值(5,1);
查询正常,1行受影响(0.00秒)
由于
答案 0 :(得分:0)
将您的Child表定义更改为下面。
CREATE TABLE `friendTable_temp` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`userId` int(32) DEFAULT NULL,
`friendId` int(32) DEFAULT NULL,
`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uc_test` (`userId`,`friendId`),
KEY `friendId` (`friendId`),
CONSTRAINT `friendTable_temp_ibfk_2` FOREIGN KEY (`friendId`) REFERENCES `userTable_temp` (`id`),
CONSTRAINT `friendTable_temp_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `userTable_temp` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1