外键的作用主要在于对各类表单进行约束,避免出现冗余数据及超出数据。那么,MySQL如何添加与删除外键?添加删除外键时报错是什么原因?
本文将从创建MySQL表单时添加外键、给已存在表单添加外键、删除外键3个方面进行介绍,属于何种情况可快速定位。
创建MySQL表单时添加外键
外键是外部引用,因此作为外键的表一定是已经存在的,此处以ta、tb两个表做一个简单介绍。
现有表单ta数据如下:
+------+---------+
| cid | cname |
+------+---------+
| 1 | Chinese |
| 2 | English |
+------+---------+
// 将引入ta表cid属性
ta表单结构如下:
| ta | CREATE TABLE `ta` (
`cid` int(11) NOT NULL,
`cname` varchar(20) DEFAULT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
//此处贴出ta表结构主要在于,作为外键引入的字段必须是唯一的,满足唯一性条件的有主键PRIMARY KEY与唯一UNIQUE,此处cid作为主键具备唯一性。
需要将ta作为外键引入tb,那么创建的tb表如下:
CREATE TABLE tb(
cid INT,
id INT,
name VARCHAR(20),
FOREIGN KEY (cid) REFERENCES ta(cid)
);
给已经存在的MySQL表单添加外键
ALTER TABLE tb ADD FOREIGN KEY(cid) REFERENCES ta(cid);
//此处需要注意的是两个字段名都需要加上括号。
删除外键
删除外键无法直接DROP FOREIGN KEY + 该字段名,而应该进行两步操作:
1、SHOW CREATE TABLE tb;
其返回结果如下:
| tb | CREATE TABLE `tb` (
`cid` int(11) DEFAULT NULL,
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
KEY `cid` (`cid`),
CONSTRAINT `tb_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `ta` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
// 需要注意的是倒数第二行CONSTRAINT得到的结果`tb_ibfk_1`,此处才是DROP的目标。
2、ALTER TABLE tb DROP FOREIGN KEY tb_ibfk_1;
// 这样才能成功删除外键。