这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。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. Go操作kafka

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展等特点.本文介绍了如何使用Go语言发送和接收kafka消息. s ...

  2. 每天学会一点点(map常量)

    map常用的声明方式(使用静态代码块): public final static Map map = new HashMap(); static { map.put("key1", ...

  3. Python学习之turtle库和蟒蛇绘制程序

    Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...

  4. .Net基础篇_学习笔记_第六天_for循环的几个练习

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. .Net基础篇_学习笔记_第六天_for循环语法_正序输出和倒序输出

    for TAB  和 forr TAB using System; using System.Collections.Generic; using System.Linq; using System. ...

  6. 一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)

    #include <stdlib.h> #include <string.h> #include "sort.h" //冒泡排序 int bubbleSor ...

  7. Java如何创建不存在的指定路径的文件?

    实际应用中,要在指定位置创建一个文件,但文件及文件之前的目录都不存在,此时可用以下方法进行创建. 以下是主要代码: File f = new File("I:" + File.se ...

  8. cython的安装

    cython 在linux(ubuntu)下安装 sudo apt-get install cython 安装后  输入 cython 即可验证是否安装成功

  9. 2019-2020学年:Java自学书单(定个小目标)

    spring spring技术内幕(回顾+深入) mysql 高性能mysql innoDB (回顾+深入) redis redis实战 redis设计与实现(巩固) 算法 算法第四版 java实现 ...

  10. web前端开发面试题(附答案)-2

    1.label是什么标签,有什么作用?和for属性使用的作用? label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上. label 元素不会向用户呈现 ...