MYSQL(十)

  目录

mysql学习笔记整理-外键约束

外键约束

外键表示一个表中的字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使 MySQL 能够保持数据完整性。
比如学生和班级表,学生表完全依赖班级表,我们可以通过外键约束让学生表与班级表产生关联,当班级表数据变化时影响学生表。

  • 父表和子表储存引擎要一致
  • 使用 InnoDB 引擎支持外键约束
  • 外键要与主表列类型一致
  • 外键列使用索引(有些版本的 mysql 会自动帮助为外键设置索引)

创建外键

下面我们先创建表关联后,再详细解释里面的参数选项。

新建表

下面创建班级表与学生表,并定义学生表与班级表建立外键约束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 班级表
CREATE TABLE class (id int PRIMARY KEY AUTO_INCREMENT,name varchar(50));

-- 学生表
CREATE TABLE stu (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`sname` varchar(30) DEFAULT NULL,
`class_id` int(11) DEFAULT NULL,
CONSTRAINT `stu_class`
FOREIGN KEY (`class_id`)
REFERENCES `class` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

修改表

下面是对学生表添加班级表的外键约束。

1
2
3
4
5
6
ALTER TABLE stu ADD
CONSTRAINT stu_class
FOREIGN KEY (class_id)
REFERENCES class(id)
ON DELETE SET NULL
ON UPDATE CASCADE;

删除

1
ALTER TABLE stu DROP FOREIGN KEY stu_class;

选项说明

下面列出外键关联用到的关键词。

选项 说明
CONSTRAINT 为外键约束定义名称
FOREIGN KEY 子表与父表关联的列
REFERENCES 子表关联的父表字段
ON DELETE 父表删除时的处理方式
ON UPDATE 父表更新时的处理方式

处理动作

ON DELETE

ON DELETE 指在删除时的处理方式,常用的处理方式包括以下几种。

选项 说明
ON DELETE CASCADE 删除父表记录时,子表记录同时删除
ON DELETE SET NULL 删除父表记录时,子表记录设置为 NULL(子表字段要允许 NULL)
ON DELETE NO ACTION
ON DELETE RESTRICT
删除父表记录时,子表不做任何处理,必须把子表处理完才可以删除主表

ON UPDATE

ON UPDATE 指在更新时的处理方式,常用的处理方式包括以下几种。

选项 说明
ON UPDATE CASCADE 更新父表记录时,比如更改主表的主键时,子表记录同时更新
ON UPDATE SET NULL 更新父表记录时,比如更改主表的主键时,子表记录设置为 NULL
ON UPDATE NO ACTION
ON UPDATE RESTRICT
更新父表记录时,子表不做任何处理,必须把子表处理完才可以更新主表