MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL

摘要:
1.当级联模式更新/删除父表上的记录时,同步更新/删除以删除子表的匹配记录。2.当setnull模式更新/删除父表上的记录时,将子表上匹配记录的列设置为null。请注意,子表的外键列不能为notnull。3.无操作模式如果子表中有匹配的记录,则不允许对父表的相应候选键进行更新/删除操作。4.限制模式与noaction相同,即立即检查外键约束5。当父表在Setdefault方法中发生更改时,子表将外键列设置为默认值,但Innodb无法识别联合主键的作用。联合主键是使用两个或多个字段组成主键。即使bill_ No Same,bill_ seq也可能不同。

1 . cascade方式

 在父表上update/delete记录时,同步update/delete掉子表的匹配记录    

2. set null方式

在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null  

3. No action方式

如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作     

4. Restrict方式

同no action, 都是立即检查外键约束   

5. Set default方式

父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL第1张

   联合主键的作用

联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。
可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补充订单,使用相同的订单号,
那么这时单独使用订单号就不可以了,因为会有重复。那么你可以再使用个订单序列号bill_seq来作为区别。把bill_no和bill_seq设成联合主键。即使bill_no相同,bill_seq不同也是可以的。

主键和外键的区别

 MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL第2张MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL第3张

原文地址:https://www.cnblogs.com/kaiwen1/p/6869025.html

免责声明:文章转载自《MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇泛型实例化,参数实例化lib和dll文件的初了解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Database】MySQL各版本的区别

MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择。 1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。3. MySQL Cluster 集群版,开源...

Mysql储存过程5: while

循环结构 while create procedure name() begin while 条件 do SQL语句 end while; end$ create procedure aa6() begin declare number int default 0; while num...

windows下打开binlog

上篇我们介绍了binlog(参见mysql的binlog),配置文件用的是linux下的my.cnf,那么在windows下如何打开binlog呢?道理是相同的,配置文件是不一样的。在windows下我们需要配置my.ini,同名但不同后缀名。我们先来看我本地mysql的binlog开关是否打开: mysql> show variables like...

Mysql触发器 :当一个表发生插入或更新时,将数据同步到另一张表中

tbl_slope:发生更新的表, checkupdates:更新后插入数据的表 CREATE triggerupdatetbl_slope AFTER update--表示触发器是在激活它的语句之后触发 ontbl_slope for each row --mysql固定语法 BEGIN if EXISTS(SELECT * FROM ch...

Django使用MySql数据库

0. 使用 docker 启动MySQL数据库 docker run -d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=sunk -p 3307:3306 --name test-mysql --restart always -v /home/ct/mysql1/data:/var/lib/mysql...

mysql复制表和表结构

一、CREATE TABLE 方法 整表复制 # create table 新表 select * from 旧表;结构复制 # create table 新表 select * from 旧表 where 1<>1; 二、INSERT INTO 方法 得到建表语句 # show create table 旧表;新建表复制数据到新表 #...