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 ...
随机推荐
- 单点登录(两种单点登录类型:SSO/CAS、相同一级域名的SSO)
单点登录:SSO(Single Sign On) 什么是单点登录:大白话就是多个网站共享一个用户名和密码的技术,对于普通用户来说,只需要登录其中任意一个网站,登录其他网站的时候就能够自动登陆,不需要再 ...
- 小程序 请求Promise简单封装
最近做小程序在调用后台接口的时候感觉总写很长一串,很冗杂.非常想念vue中promise封装的写法,于是自己初步封装了一下. 1.url 接口地址 2.headers请求头 3. params 请求参 ...
- 关于纯xmlhttprequest请求服务器数据
今天我们的web技术已经相当的完善, 各种前端框架如jquery或者再深一点的工具APIcloud 的使用极大的方便了我们的开发工作. 今天我要分享一个纯javascript的方式来解决请求服务器数据 ...
- Python集训营45天—Day04 (函数)
目录 1. 函数介绍 2. 函数的参数 3. 模块与函数 4. 递归函数 5. 匿名函数 6. 多返回值 python 的学习已经进入到第四天,前面几章我们已经学会了基本的变量操作,以及分支结构和循环 ...
- charles 帮助菜单总结
本文参考:charles 帮助菜单总结 charles的window和help的菜单介绍 其中window菜单的如下 这里我一般用到的就是 Active connections:可以用它来看charl ...
- thinkphp6 常用方法文档
请求变量 use think\facade\Request; Request::param('name'); Request::param();全部请求变量 返回数组 Request::param([ ...
- mysql命令行乱码解决办法
解决办法: 修改mysql的配置文件my.ini,打开my.ini找到default-charactor-set,改为utf8. 进入命令行: show variables like'%char%' ...
- 05:(H5*) node、npm、nrm
目录: 1:NPM 2:CNPM 3:NRM 4:homebrew 5:具体指令 6: -g -S -D 1:NPM NPM的全称是Node Package Manager, 是一个NodeJS包管理 ...
- [原创] Matlab 指派问题模型代码
指派问题的基本内容 一般来说指派问题解决的是如何将任务分配到人,使得任务完成的效益最大化(成本型效益则求最小值,利润型效益则求最大值).上述问题一个 0 - 1 整数规划问题. 问题围绕着任务和人展开 ...
- 实操:Could not autowire No beans of 'FastDFS Client' type found 的解决方法
前言: 今天接手了同事之前做的一个小项目,里面涉及到了 FastDFS 的使用.但是当我在本地运行项目的时候,却报了 Could not autowire No beans of 'FastDFS C ...