sql 外键 on update cascade 和 on delete cascade 作用区别?
这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。update 则是主键表中被参考字段的值更新,delete是指在主键表中删除一条记录:
on update 和 on delete 后面可以跟的词语有四个
no action , set null , set default ,cascade
no action 表示 不做任何操作,
set null 表示在外键表中将相应字段设置为null
set default 表示设置为默认值(restrict)
cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除
以下是4张表:
- CREATE TABLE `groups` (
- `groupid` bigint(20) unsigned NOT NULL,
- `name` varchar(64) NOT NULL DEFAULT '',
- `internal` int(11) NOT NULL DEFAULT '0',
- `flags` int(11) NOT NULL DEFAULT '0',
- PRIMARY KEY (`groupid`),
- KEY `groups_1` (`name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- CREATE TABLE `scripts` (
- `scriptid` bigint(20) unsigned NOT NULL,
- `name` varchar(255) NOT NULL DEFAULT '',
- `command` varchar(255) NOT NULL DEFAULT '',
- `host_access` int(11) NOT NULL DEFAULT '2',
- `usrgrpid` bigint(20) unsigned DEFAULT NULL,
- `groupid` bigint(20) unsigned DEFAULT NULL,
- `description` text NOT NULL,
- `confirmation` varchar(255) NOT NULL DEFAULT '',
- `type` int(11) NOT NULL DEFAULT '0',
- `execute_on` int(11) NOT NULL DEFAULT '1',
- PRIMARY KEY (`scriptid`),
- KEY `scripts_1` (`usrgrpid`),
- KEY `scripts_2` (`groupid`),
- CONSTRAINT `c_scripts_1` FOREIGN KEY (`usrgrpid`) REFERENCES `usrgrp` (`usrgrpid`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `c_scripts_2` FOREIGN KEY (`groupid`) REFERENCES `groups` (`groupid`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- CREATE TABLE `users_groups` (
- `id` bigint(20) unsigned NOT NULL,
- `usrgrpid` bigint(20) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `users_groups_1` (`usrgrpid`),
- CONSTRAINT `c_users_groups_1` FOREIGN KEY (`usrgrpid`) REFERENCES `usrgrp` (`usrgrpid`) ON DELETE CASCADE ON UPDATE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- CREATE TABLE `usrgrp` (
- `usrgrpid` bigint(20) unsigned NOT NULL,
- `name` varchar(64) NOT NULL DEFAULT '',
- `gui_access` int(11) NOT NULL DEFAULT '0',
- `users_status` int(11) NOT NULL DEFAULT '0',
- `debug_mode` int(11) NOT NULL DEFAULT '0',
- PRIMARY KEY (`usrgrpid`),
- KEY `usrgrp_1` (`name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.
users_groups表引用外键 usrgrp.usrgrpid 并设置 ON DELETE CASCADE ON UPDATE CASCADE
scripts表引用外键 usrgrp.usrgrpid 并设置 ON
DELETE CASCADE ON UPDATE CASCADE
所以对已引用usrgrp.usrgrpid字段的修改对应引用的表也会修改
2.
scripts.groupid 引用groups.groupid 没有设置操作关联属性
CONSTRAINT `c_scripts_2` FOREIGN KEY (`groupid`) REFERENCES `groups` (`groupid`)
对已引用groups.grouppid字段不可修改
sql 外键 on update cascade 和 on delete cascade 作用区别?的更多相关文章
- 主外键 设置 on update cascade 和on delete cascade 的区别
on update cascade 和on delete cascade 的区别 这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的.updat ...
- SQL 外键
先新建2个表,写入数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测试子 ...
- My SQL外键约束
外键约束对子表的含义:如果在父表中找不到对应的候选键,则不能对子表进行insert/update操作 外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹 ...
- Oracle SQL 外键测试
测试SQL 创建SQL t1为主表 t2为子表 create table t1(insert_date number,id int) create table t2(insert_d ...
- SQL外键的作用
貌似很有用,但没有真正用过: SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3) ...
- 两句话概括“sql外键”
外键的使用就是: 1.外键表可以删除,外键表删完了 才能删主键表2.添加的时候不能添加在主键没有的内容
- 数据库 SQL 外键约束 多表查询
多表设计与多表查询 1.外键约束 表是用来保存现实生活中的数据的,而现实生活中数据和数据之间往往具有一定的关系,我们在使用表来存储数据时,可以明确的声明表和表之前的依赖关系,命令数据库来 ...
- 关于sql 外键的讨论。
外键是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合,什么时候不适合使用: 1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制 ...
- SQL外键约束
1.查询表已有的外键 select name from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o ...
随机推荐
- Go操作kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展等特点.本文介绍了如何使用Go语言发送和接收kafka消息. s ...
- 每天学会一点点(map常量)
map常用的声明方式(使用静态代码块): public final static Map map = new HashMap(); static { map.put("key1", ...
- Python学习之turtle库和蟒蛇绘制程序
Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...
- .Net基础篇_学习笔记_第六天_for循环的几个练习
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- .Net基础篇_学习笔记_第六天_for循环语法_正序输出和倒序输出
for TAB 和 forr TAB using System; using System.Collections.Generic; using System.Linq; using System. ...
- 一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)
#include <stdlib.h> #include <string.h> #include "sort.h" //冒泡排序 int bubbleSor ...
- Java如何创建不存在的指定路径的文件?
实际应用中,要在指定位置创建一个文件,但文件及文件之前的目录都不存在,此时可用以下方法进行创建. 以下是主要代码: File f = new File("I:" + File.se ...
- cython的安装
cython 在linux(ubuntu)下安装 sudo apt-get install cython 安装后 输入 cython 即可验证是否安装成功
- 2019-2020学年:Java自学书单(定个小目标)
spring spring技术内幕(回顾+深入) mysql 高性能mysql innoDB (回顾+深入) redis redis实战 redis设计与实现(巩固) 算法 算法第四版 java实现 ...
- web前端开发面试题(附答案)-2
1.label是什么标签,有什么作用?和for属性使用的作用? label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上. label 元素不会向用户呈现 ...