`
androider
  • 浏览: 751639 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Mysql 的 Cascade Restrict

阅读更多

外键约束对子表的含义:
  如果在父表中找不到候选键,则不允许在子表上进行insert/update

外键约束对父表的含义:
  在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下
 
  . cascade方式
   在父表上update/delete记录时,同步update/delete掉子表的匹配记录
   On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用

  . set null方式
   在父表上update/delete记录时,将子表上匹配记录的列设为null
   要注意子表的外键列不能为not null
   On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用

  . No action方式
   如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
   这个是ANSI SQL-92标准,从mysql4.0.8开始支持

  . Restrict方式
   同no action, 都是立即检查外键约束

  . Set default方式
   解析器认识这个action,但Innodb不能识别,不知道是什么意思...
 
  注意:trigger不会受外键cascade行为的影响,即不会解发trigger

在mysql中,与SQL标准相违背的三点
1.       如果在父表中有多个key值相同,那么在进行外键check时,会当成有相同key值的其他行不存在; 比如当定义了一个restrict行为外键时,一个子表行对应到多个父表行(具有相同key值), Innodb不允许删除父表上的所有这些行

2.       父子表是同一个表,自我参照时不允许指定on update cascade, on update set null
从mysql4.0.13开始,允许同一个表上的on delete set null
从mysql4.0.21开始,允许同一个表上的on delete cascade
但级联层次不能超出15

3, Innodb在检查unique,constraint约束时,是row by row而不是语句或事务结束;
  SQL标准中对constraint的检查是在语句执行完成时
分享到:
评论
1 楼 xianyunxiaoyao 2012-01-03  
   学习了

相关推荐

    mysql中的cascade级联,set null,restrict限制 都是什么意思,有何区别.zip

    在MySQL数据库中,当涉及到表间关系,特别是外键约束时,`CASCADE`, `SET NULL`, 和 `RESTRICT` 是三种常见的操作行为。这些行为定义了如何处理在删除或更新主表(父表)记录时,与之相关联的从表(子表)的记录。...

    mysql-存储引擎-实验四.docx

    在 MySQL 中,外键的规则可以使用 RESTRICT、CASCADE、SET NULL、NO ACTION 等关键字来指定。 8. 设置外键禁用,对(7)做相应操作后,说明现象和原因。 在实验中,我们设置了外键禁用,并对学生表中学号执行了增...

    MySQL中利用外键实现级联删除、更新

    在创建索引时,可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、NO ACTION、SET NULL 和 CASCADE。其中 RESTRICT 和 NO ACTION 相同,是指在子表有关联记录的情况下父表不能更新;CASCADE 表示父...

    mysql级联更新和级联删除

    MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade Delete)。本文将深入探讨这两种机制及其在MySQL中的实现方式。 #### 一、基本概念 **级联更新(Cascade ...

    mysql内外键使用

    ON DELETE {CASCADE | RESTRICT | SET NULL | NO ACTION} ON UPDATE {CASCADE | RESTRICT | SET NULL | NO ACTION} ); ``` 其中,`child_table`是子表,`parent_table`是父表,`column_name`是子表中作为外键的列...

    mysql外键的使用

    [ON DELETE {CASCADE | RESTRICT | SET NULL | NO ACTION}] [ON UPDATE {CASCADE | RESTRICT | SET NULL | NO ACTION}] ); ``` 这里,`child_table`是子表,`parent_table`是父表,`foreign_key_column`是子表中...

    mysql第三阶段

    4. NO ACTION(在MySQL中等同于RESTRICT):遵循同样的规则。 表级约束和列级约束的差异在于作用范围。列级约束是在创建或修改列时定义的,而表级约束则独立于列,可以应用于多个列或表的特定条件。 修改数据表...

    mysql_SQL语句 学习文档

    2. **删除模式**:例子15展示了DROP SCHEMA语句删除模式,CASCADE或RESTRICT选项决定了删除模式时是否同时删除其下的对象。 ### 单表操作 例子16是一个查询示例,用于找出学分为3的课程号,这可以通过SELECT语句...

    mysql基础语法大全

    `(cascade 是没有条件的删除对象也会被删除 默认是 restrict, 但是不能删除具有依赖关系的表) 索引创建 1. 创建索引:`create unique index 索引名 on 表名(元素 1 ,元素 2…..);`(可以再元素后加 asc 表示升序...

    MySQL外键详解

    [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]; ``` - **约束类型**: - **CASCADE**:当父表的外键关联列被更新或删除时,子表中的外键值也将被相应地更新或删除。 - **RESTRICT/NO ACTION**:不...

    Mysql增加外键的方法

    常见的触发限制参数有ON DELETE和ON UPDATE,它们可以设置成多种参数,包括CASCADE(级联删除或更新)、RESTRICT(限制删除或更新)、SET NULL(将引用列置为空)和SET DEFAULT(设置默认值)。不加参数时,默认行为...

    mysql教程详细总结

    - 当父表中的记录被删除时,可以选择几种操作方式(如CASCADE、SET NULL、NO ACTION、RESTRICT)来维护子表数据的完整性。 #### 数据操纵语言(DML) DML(Data Manipulation Language)用于数据的操作,主要包括...

    mysql数据库设置外键应该注意的几点

    可以通过`ON DELETE RESTRICT`或`ON UPDATE RESTRICT`防止这种情况。 6. **性能考虑**: 虽然外键能增强数据完整性,但也会对查询性能产生一定影响,尤其是在大型数据库中。因此,在设计时需要权衡数据完整性和...

    mysql外键教程.zip

    MySQL数据库在设计关系型数据库时,外键是一个关键的概念,它用于维护数据库中表与表之间的关联性。这个“mysql外键教程.zip”压缩包包含了关于MySQL外键使用的多个方面,下面将详细解释这些知识点。 首先,我们...

    MYSQL 高级篇之数据库搜索引擎及原理

    在创建索引时, 可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、CASCADE、SET NULL 和 NO ACTION。 RESTRICT和NO ACTION相同, 是指限制在子表有关联记录的情况下, 父表不能更新; CASCADE...

    mysql外键设置

    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]; ``` 其中: - `yourtablename`:指需要添加外键约束的表名。 - `index_col_name`:指被...

    MySql外键设置详解

    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}] 其中,on delete/on update 用于定义 delete、update 操作。 三、外键的约束类型 外键的...

    MySQL数据库基础培训.pptx

    外键设置还包括级联操作(CASCADE)、限制操作(RESTRICT、NO ACTION)和设为NULL(SET NULL)。 10. **数据库语言深入**:理解SQL语句的优化策略,提高查询效率,如合理使用索引、避免全表扫描、减少子查询等。 ...

    MySQL基础整理笔记

    - **CASCADE**:当更新或删除父表中的记录时,子表中的相关记录也会被相应地更新或删除。 - **SET NULL**:当删除或更新父表中的记录时,将子表中的外键设为 NULL。使用此选项时,必须确保子表列未指定 `NOT NULL`...

Global site tag (gtag.js) - Google Analytics