外键约束

语法:

注:

  • 只有InnoDB存储引擎支持外键,并且在创建外键的时候,我们子表的外键必须关联主表的主键。

  • 外键字段依赖于已经存在的表的一个主键,所以一定要先有主表。

  • 我们的外键字段必须和我们主表的主键字段的数据类型要相似:如果是数值型,两者必须类型一致,并且同时为有无符号;如果是字符串型,两者的长度可以不同,但是类型必须相同。

  • 如果子表的外键字段没有创建索引,但是当我们创建完外键之后,它会自动的添加索引。

  • 如果子表中有记录外键关联着主表中的记录,那么主表中的这条记录以及主表是无法删除的,子表中的这些记录可以删除。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
-- 创建表时添加外键约束
CREATE TABLE 子表 (
    列1 数据类型,
    列2 数据类型,
    ...
    FOREIGN KEY (外键列名) REFERENCES 父表(主键列名)
);

-- 在现有表上添加外键约束
ALTER TABLE 子表
ADD CONSTRAINT 外键约束名
FOREIGN KEY (外键列名) REFERENCES 父表(主键列名);



--建表时指定外键
[CONSTRAINT 外键名称] FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)
1

范例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
-- 假设已经存在父表 `country` 有主键 `id`
CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    country_id INT,
    FOREIGN KEY (country_id) REFERENCES country(id)
);

-- 或者给现有的表添加外键约束
ALTER TABLE user
ADD CONSTRAINT fk_country
FOREIGN KEY (country_id) REFERENCES country(id);

动态删除外键

1
2
ALTER TABLE 表名
DROP FOREIGN KEY fk_name;