1. 外键概述
MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
如果不是特别理解什么是主表,什么是从表 请查看下面2建表中的内容
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
1.1 CASCADE 级联操作
- ON DELETE CASCADE 删除时级联 ,删除主表 从表对应记录随之删除
- ON UPDATE CASCADE 修改时级联 , 修改主表 从表对应记录随之修改
1.2 RESTRICT 严格模式
- ON DELETE RESTRICT 删除时严格 ,删除主表 从表对应记录存在则主表不允许删除
- ON UPDATE RESTRICT 修改时严格 , 修改主表 从表有对应记录则主表不允许修改
1.3 常规操作
- ON DELETE RESTRICT 删除时严格 ,删除主表 从表对应记录存在则主表不允许删除
- ON UPDATE CASCADE 修改时级联 , 修改主表 从表对应记录随之修改
1.4 定义外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
2. 建表
一张专业表,一张学生表,如下图所示
专业表为主表(父表)学生表为从表(子表),学生表的mid为外键关联专业表的id
从以上截图大家不难看出,想要实现外键约束必须要求这两张表的引擎为 innodb
2.1 使用sql语句建表时设置表引擎为innodb
create table major(
id int primary key auto_increment,
major_name varchar(20)
)engine=innodb;
2.2 使用navicat for mysql建表时候设置表引擎为innodb
3. SQL添加外键
3.1 在创建表时设置外键约束
CREATE TABLE student(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25),
mid INT(11),
CONSTRAINT f1
FOREIGN KEY(mid) REFERENCES major(id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=INNODB
3.2 表创建成功后添加外键约束
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
ALTER TABLE student ADD CONSTRAINT f1
FOREIGN KEY(mid) REFERENCES major (id) ON DELETE RESTRICT ON UPDATE CASCADE;
4. Navicat for MySQL 添加外键
5. 删除外键
5.1 sql命令删除
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
ALTER TABLE student DROP FOREIGN KEY f1;
谢谢老师,学会了已经月入2w了
那么牛的吗