外键的作用主要在于对各类表单进行约束,避免出现冗余数据及超出数据。那么,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;

// 这样才能成功删除外键。