当,对数据库的外键进行了成功删除之后,
在添加新的外键约束的时候,提示:
ERROR 1005 (HY000): Can’t create table ‘数据库名.#sql-随机数字’ (errno: 150)
这很有可能是你,在命令中指定了两个表都没有/只有一个表有
的字段来尝试,用酱婶的字段添加外键约束(列),
举例如下,
我有2个表,student 和 score ,我要使用这2个表都有
的 字段 sid
来 建立外键约束,这是没有问题的,如下:
mysql> describe student;
mysql> describe score;
接下来,要建立外键约束的时候,使用到 两个表的 sid
字段(列)
在 score 表中 建立了一个关于 student 表的外键,
mysql> alter table score add constraint score_fk foreign key (sid) references student(sid);
到这里,创建外键都没有出错,
接下来,为了做实验,先删除这个外键,再重新创建外键,看看会不会出错,
现在,将 score 表的这个外键删除,
mysql> alter table score drop foreign key score_fk;
到这里,删除外键也没有出错,
然后,尝试再次给 score 表添加外键约束
,
却出现了错误
报错了!
来仔细看一下添加外键约束的语句,发现 错误 发生在 命令末尾,
是指定的列名(字段名)有问题, 应该是 sid
而不是 id
,
修正语句,重新执行,
mysql> alter table score add constraint score_fk1 foreign key(sid) references student(sid);
没有问题,语句成功执行,
所以,当遇到了一些奇怪的错误提示,又不知道从何下手解决问题的时候,一般的办法是,逐字检查自己写的语句有没有问题,比如标点符号是不是英文的,比如关键字是不是多个字母、少个字母、错了字母、字母顺序错了等等,
接下来再介绍一个非常给力的查看表创建信息的语句,如下:
mysql> show create table score;
在这里就能看到建表的详细信息,包括刚才建立的外键约束,非常有用。
January the 17th 2022 Monday