数据库外键添加删除修改
问题1:
ERROR 1005 (HY000): Can’t create table ‘mydb.#sql-f58_12’ (errno: 150)
数据库表中外键加不上?
以前给表中字段加外键,都是加的另一个表的主键,这次同学问我,给一个author表中的name加外键(user表中的username),username不是主键。
alter table author add foreign key(name) references user(username)
然后就是加不上。。。
-
原因1
user表中的username,要成为author中name的外键,username(不是主键)此字段必须加上索引
alter table user add index(username)
-
原因2
username和name者两个字段的类型必须一致。 -
原因3
show create table author
show create table user
看一下者两个表的类型是否一致
-
原因4
你的数据库引擎类型是MyISAM- 外键
MyISAM:不支持
InnoDB:支持
- 外键
修改不了外键?
是的,经过一番百度,外键好像是不能直接修改的。
我用小海豚改了外键约束,想加一个Cascade,级联删除和级联修改。
出现以下提示:
所以说删了重新建!
删除外键约束
alter table author drop foreign key 外键名
;
删除报错 Can’t create table ‘mysqltest.#sql-f58_3f’ (errno: 150)
Error on rename of ‘.\mysqltest\sc’ to ‘.\mysqltest#sql2-f58-3f’ (errno: 152)
这些问题在于把外键名字写错了,外键的名字不是字段名。
如果你添加外键的时候用的是:
//没有指定添加外键的名字,数据库会有默认名字author_ibfk_1
ALTER TABLE author ADD FOREIGN KEY (NAME) REFERENCES USER(username)
//指定了添加的外键的名字为qwe, constraint qwe
ALTER TABLE author ADD CONSTRAINT qwe FOREIGN KEY (NAME) REFERENCES USER(username)
所以删除外键的时候先看一下外键的名字是什么?
show create table author;
Query OK! 哈哈
问题2:
ERROR 1452 Cannot add or update a child row: a foreign key constraint fails (mysqltest
.#sql-cb4_10
, CONSTRAINT studentfore1
FOREIGN KEY (snum
) REFERENCES user
(snum
) ON DELETE CASCADE ON UPDATE CASCADE)
想给student表添加个外键,但是报错,是因为添加外键后,要保证student表中的数据要在user表中存在,所以应该先删除student表中的数据。
谢谢!