大家好,又见面了,我是你们的朋友全栈君。
外键作用:1.保证数据的完整性、一致性,更可靠。
2.设置外键约束的两个表之间会有 父子关系 ,即字表中外键字段的取值范围 取决于 父表
3.设置外键一定程度上降低了数据库的速度
4.字表中外键字段的数据类型要与父表中的数据类型一致。
建立外键语法:[constraint 外键名] foreign key (子表字段名 ) references 父表 (父表字段名)
[on delete {restrict | cascade | set null | on action }]
[on update {restrict | cascade | set null | on action }]
该语法可以在create table 和 alter table时使用,如果不指定 constraint 外键名 ,mysql会自动生成一个名字,可以通过 show create table 表名 查看
例:create table student(id int primary key auto_increment,name varchar(32),sex enum(‘w’,’m’),
dep_id int unique,
foreign key(dep_id) references deptment(id)
on delete cascade
on update cascade);
解除外键:alter table 表名 drop foreign key 外键名;
注意:删除外键后发现 desc 查看索引标志还在,其实外键也是一种索引,需要将外键索引删除才可以。
级联动作:1. restrict(默认):on delete restrict on update restrict
主表删除时,如果从表里有记录则不允许删除主表
当主表更改主键字段时,如果从表里有相关记录则不允许更改
2. cascade: on delete cascade on update cascade
当主表删除记录或更改被参照字段的值时,从表会级联更新 :这个比较危险,容易级联把数据都删除
3. set null: on delete set null on update set null
当主表删除记录时,从表外键字段值变成 null
当主表更新主键字段值时,从表外键字段值变成null
4. no action:同restrict
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155390.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...