读书人

请教小弟我建的mysql外键错在哪里了啊

发布时间: 2012-05-04 12:36:09 作者: rapoo

请问我建的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 表中存在但是在父表中不存在,那么着语句会执行失败,插不进数据是因为在父表中该主键不存在,所以在子表插入会失败!

读书人网 >Mysql

热点推荐