这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。update 则是主键表中被参考字段的值更新,delete是指在主键表中删除一条记录:
on update 和 on delete 后面可以跟的词语有四个
no action , set null , set default ,cascade

no action 表示 不做任何操作,
set null 表示在外键表中将相应字段设置为null
set default 表示设置为默认值(restrict)

cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除

以下是4张表:

  1. CREATE TABLE `groups` (
  2. `groupid` bigint(20) unsigned NOT NULL,
  3. `name` varchar(64) NOT NULL DEFAULT '',
  4. `internal` int(11) NOT NULL DEFAULT '0',
  5. `flags` int(11) NOT NULL DEFAULT '0',
  6. PRIMARY KEY (`groupid`),
  7. KEY `groups_1` (`name`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. CREATE TABLE `scripts` (
  2. `scriptid` bigint(20) unsigned NOT NULL,
  3. `name` varchar(255) NOT NULL DEFAULT '',
  4. `command` varchar(255) NOT NULL DEFAULT '',
  5. `host_access` int(11) NOT NULL DEFAULT '2',
  6. `usrgrpid` bigint(20) unsigned DEFAULT NULL,
  7. `groupid` bigint(20) unsigned DEFAULT NULL,
  8. `description` text NOT NULL,
  9. `confirmation` varchar(255) NOT NULL DEFAULT '',
  10. `type` int(11) NOT NULL DEFAULT '0',
  11. `execute_on` int(11) NOT NULL DEFAULT '1',
  12. PRIMARY KEY (`scriptid`),
  13. KEY `scripts_1` (`usrgrpid`),
  14. KEY `scripts_2` (`groupid`),
  15. CONSTRAINT `c_scripts_1` FOREIGN KEY (`usrgrpid`) REFERENCES `usrgrp` (`usrgrpid`) ON DELETE CASCADE ON UPDATE CASCADE,
  16. CONSTRAINT `c_scripts_2` FOREIGN KEY (`groupid`) REFERENCES `groups` (`groupid`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. CREATE TABLE `users_groups` (
  2. `id` bigint(20) unsigned NOT NULL,
  3. `usrgrpid` bigint(20) unsigned NOT NULL,
  4. PRIMARY KEY (`id`),
  5. UNIQUE KEY `users_groups_1` (`usrgrpid`),
  6. CONSTRAINT `c_users_groups_1` FOREIGN KEY (`usrgrpid`) REFERENCES `usrgrp` (`usrgrpid`) ON DELETE CASCADE ON UPDATE CASCADE
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. CREATE TABLE `usrgrp` (
  2. `usrgrpid` bigint(20) unsigned NOT NULL,
  3. `name` varchar(64) NOT NULL DEFAULT '',
  4. `gui_access` int(11) NOT NULL DEFAULT '0',
  5. `users_status` int(11) NOT NULL DEFAULT '0',
  6. `debug_mode` int(11) NOT NULL DEFAULT '0',
  7. PRIMARY KEY (`usrgrpid`),
  8. KEY `usrgrp_1` (`name`)
  9. ) 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 作用区别?的更多相关文章

  1. 主外键 设置 on update cascade 和on delete cascade 的区别

    on update cascade 和on delete cascade 的区别 这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的.updat ...

  2. SQL 外键

    先新建2个表,写入数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测试子 ...

  3. My SQL外键约束

    外键约束对子表的含义:如果在父表中找不到对应的候选键,则不能对子表进行insert/update操作 外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹 ...

  4. Oracle SQL 外键测试

    测试SQL 创建SQL     t1为主表      t2为子表 create table t1(insert_date number,id int) create table t2(insert_d ...

  5. SQL外键的作用

    貌似很有用,但没有真正用过: SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3) ...

  6. 两句话概括“sql外键”

    外键的使用就是: 1.外键表可以删除,外键表删完了 才能删主键表2.添加的时候不能添加在主键没有的内容

  7. 数据库 SQL 外键约束 多表查询

    多表设计与多表查询 1.外键约束        表是用来保存现实生活中的数据的,而现实生活中数据和数据之间往往具有一定的关系,我们在使用表来存储数据时,可以明确的声明表和表之前的依赖关系,命令数据库来 ...

  8. 关于sql 外键的讨论。

    外键是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合,什么时候不适合使用: 1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制 ...

  9. SQL外键约束

    1.查询表已有的外键 select name from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o ...

随机推荐

  1. java架构之路-(11)JVM的对象和堆

    上次博客,我们说了jvm运行时的内存模型,堆,栈,程序计数器,元空间和本地方法栈.我们主要说了堆和栈,栈的流程大致也说了一遍,同时我们知道堆是用来存对象的,分别年轻代和老年代.但是具体的堆是怎么来存放 ...

  2. android 之图片异步加载

    一.概述 本文来自"慕课网" 的学习,只是对代码做一下分析 图片异步加载有2种方式:  (多线程/线程池) 或者 用其实AsyncTask , 其实AsyncTask底层也是用的多 ...

  3. 将dos格式文件转换为unix格式

    在windows下换行符是\r\n,表示回到行首并换到下一行 而unix系统中换行符是\n 这样就存在一个问题,在windows上的文档到了unix上可能就无法使用了 针对这个情况有几种解决办法: 1 ...

  4. 运行pytest,报错"AttributeError: 'module' object has no attribute 'xxx'"

    最近学习pytest被此问题困扰,敲脑壳,实在是不该.百度解决方法一大堆,我的问题怎么也解决不了,来看一下,我是怎么解决的,各位大佬勿喷,只是自己做笔记用,谢谢. 报错信息如下: 网上解决方法是这样的 ...

  5. mysql-connector-java-5.-bin.jar 下载方法

    访问https://downloads.mysql.com/archives/c-j/,选择相应版本,如图 加油zip即可得到

  6. [C++]类的设计(2)——拷贝控制(阻止拷贝)

    1.阻止拷贝的原因:对于某些类来说,拷贝构造函数和拷贝赋值运算符没有意义.举例:iostream类阻止了拷贝,以避免多个对象写入或者读取相同的IO缓冲.   2.阻止拷贝的方法有两个:新标准中可以将成 ...

  7. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  8. String StringBuffer StringBuilder的异同

    1.String与StrIngBuffer StringBuilder的主要区别在于StrIng是不可变对象,每次对String对象进行修改之后,相对于重新创建一个对象. String源码解读: pr ...

  9. meta标签设置(移动端)

    一.首先出结论:移动端meta标签一般设置为: <meta content="width=device-width,initial-scale=1.0,maxinmum-scale=1 ...

  10. 提交第一个spark作业到集群运行

    写在前面 接触spark有一段时间了,但是一直都没有真正意义上的在集群上面跑自己编写的代码.今天在本地使用scala编写一个简单的WordCount程序.然后,打包提交到集群上面跑一下... 在本地使 ...