首页 > 编程笔记

MySQL外键约束的使用

MySQL 外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

外键及其相关名词释义如下:

外键

它是表中的一个字段,虽然可以不是本表的主键,但要对应另外一个表的主键。

外键的作用有两个:

主表(父表)

对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

从表(子表)

对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

MySQL 创建外键的语法规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [ ,字段名2,…]
REFERENCES <主表名> 主键列1 [ ,主键列2,…]
细节说明:
【示例】定义数据表 tb_emp5,并在 tb_emp5 表上创建外键约束。

创建一个部门表 tb_dept1,表结构如表1所示,SQL 语句如下:
CREATE TABLE tb_dept1
(
    id INT PRIMARY KEY,
    name VARCHAR(22) NOT NULL,
    location VARCHAR(50)
);

表1:tb_dept1 表结构
字段名称 数据类型 备注
id INT 部门编号
name VARCHAR(22) 部门名称
location VARCHAR(50) 部门位置

定义数据表 tb_emp5,让它的字段 deptId 作为外键关联到 tb_dept1 的主键 id,SQL 语句为:
CREATE TABLE tb_emp5
(
    id INT PRIMARY KEY,
    name VARCHAR(25),
    deptId INT,
    salary FLOAT,
    CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);
以上语句执行成功之后,在表 tb_emp5 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

温馨提示

MySQL 中的关联,指的是在关系型数据库中相关表之间的联系,它是通过相容或相同的属性或属性组来表示的。

子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则在创建子表时,就会出现错误:

ERROR 1005 (HY000): Can’t create table’database.tablename’(errno:150)

推荐阅读