网上搜索结果告诉我有以下三种原因:
1、表名重复
2、以该名字命名的表之前创建过后来删除了,但是对应的.frm文件还留在磁盘上
3、主键名字在全数据库范围内不是唯一的
今天遇到的应该是第三种情况-----主键名字在全数据库范围内不是唯一的
在设置外键的时候,外键名之前在另外一张表里面已经使用过,这就造成了'121'这个错误。将外键名进行更改后,建表成功。
结合我自己的实际情况 ,推导自己的错误原因大概是约束名 与其他表约束名 重复了。
语法:创建表时 指定外键约束 :
constraint 约束名称 foreign key(外键列名) references 关联表 (关联表的主键);
学生成绩表(t_score):
错误多次的建表如下:
create table t_score(
-> sid char(5),
-> cid char(2),
-> score int comment'成绩',
-> constraint fk_1 foreign key(sid) references t_student(sid),
-> constraint fk_2 foreign key(cid) references t_course(cid)
-> );
1005 - Can't create table 'homework.t_score' (errno: 121)
改正过后的建表:
mysql> create table t_score(
-> sid char(5),
-> constraint fk_3 foreign key (sid) references t_student(sid),
-> cid char(2),
-> constraint fk_4 foreign key(cid) references t_course(cid),
-> score int
-> );
Query OK, 0 rows affected
总结 错误原因:约束名与已有表中的外键名字重复,故不能创建。1005 ******* 121
错误