MYSQL创建外键

今天将sqlite的表迁移到mysql中,有一张表的存在外键。外键约束的成立条件首先就是子表(定义外键的表)的引用的父表的那一列有唯一性约束,也就是UNIQUE,当一列是主键(PRIMARY KEY )他已经是默认的唯一性,所以可以不用考虑这个问题。另外还需要注意的问题如下:

  1. 找不到父表中引用的列

  2. 主键和外键的字符编码不一致

  3. 外键字段与要做外键校验的字段类型不匹配

  4. MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB,非InnoDB 存储引擎会导致报错

  5. 多个子表的外键引用同一个父表的列时,每个外键的名称不能一样

外键的用法一般作为一种关联性校验,如下:

  1. 父表更新时子表也更新,父表删除时如果子表有匹配的项删除失败 (ON UPDATE CASCADE ON DELETE RESTRICT)

  2. 父表更新时子表也更新,父表删除时子表匹配的项也删除(ON UPDATE CASCADE ON DELETE CASCADE)

下面给出一个简单的例子分别创建父表和子表。

父表sql语句:

1
2
3
4
5
6
7
CREATE TABLE `线路表` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`线路名` varchar(255) DEFAULT NULL,
`属性` varchar(255) DEFAULT NULL,
`统计` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

子表sql语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `节点表` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`线路ID` int(11) NOT NULL,
`节点名` varchar(255) DEFAULT NULL,
`属性` varchar(255) DEFAULT NULL,
`位置` varchar(255) DEFAULT NULL,
`版本` varchar(255) DEFAULT NULL,
`设置` varchar(255) DEFAULT NULL,
`统计` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `FK` (`线路ID`),
CONSTRAINT `FK` FOREIGN KEY (`线路ID`) REFERENCES `线路表` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

MYSQL创建外键
http://yoursite.com/2019/04/02/MYSQL创建外键/
作者
还在输入
发布于
2019年4月2日
许可协议