日期:2014-05-16  浏览次数:20846 次

请问我建的mysql外键错在哪里了啊?
我的sql语句
SQL code
alter table personstory add constraint FK_Reference_user_personstory foreign key (userID)
      references user(userID) on delete restrict on update restrict;

错误提示:
Error Code : 1005
Can't create table '.\dep\#sql-3b8_1.frm' (errno: 121)

Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000

------解决方案--------------------
语句没问题

mysql> create table a (userid int primary key);
Query OK, 0 rows affected (0.01 sec)

mysql> create table b (a int ,userid int);
Query OK, 0 rows affected (0.00 sec)

mysql> alter table b add constraint FK_Reference_user_personstory foreign key (userID)
-> references a(userID) on delete restrict on update restrict;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
------解决方案--------------------
检查你的user表中的 (userID) 是不是主键? 字段的数据类型是否一致?
------解决方案--------------------
应该是personstory表中的部分userID在user(userID)中找不到,所以导致建不了
------解决方案--------------------
如果你的两个表是空的,那么着这个语句没有问题,如果有的在user 表中存在但是在父表中不存在,那么着语句会执行失败,插不进数据是因为在父表中该主键不存在,所以在子表插入会失败!