首页 > 数据库 >MySQL中的级联删除与更新策略on delete restrict on update restrict

MySQL中的级联删除与更新策略on delete restrict on update restrict

时间:2022-12-23 14:33:48浏览次数:56  
标签:comment varchar 记录 update 外键 restrict MySQL null


MySQL中的级联删除与更新策略on delete restrict on update restrict

在MySQL中,当我们执行级联删除与级联更新时,可能会执行On Delete Restrict和On Update Restrict语句,这两个语句中都可以有Restrict,No Action, Cascade,Set Null属性,我简单总结一下这些属性的含义。

比如有如下SQL语句:

/*==============================================================*/
/* Table: address */
/*==============================================================*/
create table tb_address
(
a_id int not null auto_increment comment '地址实体的唯一主键列',
u_id int comment '用户实体的主键属性',
a_name varchar(30) comment '地址的收件人',
a_phone varchar(14) comment '收件人电话',
a_detail varchar(200) comment '收货人详细地址',
a_state int comment '是否是默认地址 0 不是 1是默认地址',
primary key (a_id)
);


/*==============================================================*/
/* Table: user */
/*==============================================================*/
create table tb_user
(
u_id int not null auto_increment comment '用户实体的主键属性',
u_name varchar(20) not null comment '用户账号',
u_password varchar(64) not null comment '用户密码',
u_email varchar(50) not null comment '用户的邮箱!用于激活使用!',
u_sex varchar(4) comment '用户性别!',
u_status int comment '用户的激活状态 0 未激活 1 激活',
u_code varchar(64) comment '邮件激活码',
u_role int comment '用户 0 管理员 1',
primary key (u_id)
);


alter table tb_address add constraint FK_u_a_fk foreign key (u_id)
references tb_user (u_id) on delete restrict on update restrict;

ON DELETE操作

restrict(约束): 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

no action: 意思同restrict.即如果存在从数据,不允许删除主数据。

cascade(级联): 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。

set null: 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

ON UPDATE操作

restrict(约束): 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

no action: 意思同restrict.

cascade(级联): 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

set null: 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

注:

NO ACTION和RESTRICT的区别: 只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

标签:comment,varchar,记录,update,外键,restrict,MySQL,null
From: https://blog.51cto.com/u_7044146/5965625

相关文章

  • MySQL Data source rejected establishment of connection, message from server: “T
    MySQL数据库中Datasourcerejectedestablishmentofconnection "Toomanyconnections"异常解决错误原因: 利用C3P0数据源,连接MySQL服务器时,产生了太多的连接数,数据库客......
  • 11:高级部分-MySQL
    (目录)(一)view视图1.开场高级部分不属于实习内容,已经超过了实习范围尤其是培训机构不会讲这些,主要是经验规范之谈2.view视图创建、使用以及作用视图主要负责筛选,有......
  • centos7安装mysql5.7
    centos7安装mysql5.7环境搭建、清理旧安装包进入到目录/usr/local/中cd/usr/local/创建目录/usr/local/tools,如果有则忽略mkdir-ptools创建/usr/local/mysq......
  • MySQL-索引优化
    回顾聚簇索引,官网的定义在这里。聚簇索引无法显示创建,存储引擎会根据一定的规则自动创建,具体规则优先级是:主键--》非空唯一索引--》隐藏列rowid**InnoDB表的主键列应该......
  • docker中mysql配置主从
    创建文件夹&编辑my.cnf内容mkdir-p/opt/docker/mysql-8.0/master/cnfmkdir-p/opt/docker/mysql-8.0/master/datavim/opt/docker/mysql-8.0/master/cnf/mysql.cnf[......
  • centos安装mysql8
    安装教程#获取MySQL8.0源wgethttps://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm#安装源rpm-ivhmysql80-community-release-el7-2.noarch.r......
  • #PHP #MySQL数据操作 #在线聊天 PHP实现在线聊天与MySQL的“增查删改”
     目录1.目标图2.项目简介 3.目录结构 4.建立MySQL表 5.实现过程 5.1index.php5.2data.php 5.2method.php5.3 case.php5.4main.js5.5css/style.cs......
  • MySQL 5.7中如何定位DDL操作的阻塞问题
    mysql>begin; QueryOK,0rowsaffected(0.00sec) mysql>select*fromt1; +----+------+------+------+-------+ |id|name|age |num |num01| +---......
  • mysql自带的压力测试工具mysqlslap
    mysql自带的压力测试工具mysqlslap,详情如下: 重要参数: --concurrency代表并发数量,多个可以用逗号隔开,当然你也可以用自己的分隔符隔开,这个时候要用到--delimiter开关。 -......
  • MySQL的一些常用命令
    mysql创建用户:createuser‘用户名’@‘%’identifiedby'密码';   #'%'表示所有地址都可以访问flushprivileges;   #刷新权限grantallon......