标签:主表 外键 约束 restrict cascade set null
外键作用: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
标签:主表,外键,约束,restrict,cascade,set,null 来源: https://www.cnblogs.com/libotao/p/14696172.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。