`

mysql级联删除-----Mysql 的 Cascade Restrict

阅读更多
今天遇到数据库的一个问题,就是每当从主表中删除一个主键id时,由于与他相关联的表中有相关的字段数据,所以无法删除。查了一大堆资料,发现我建表关联用的是on 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的检查是在语句执行完成时
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    mysql级联更新和级联删除

    ### MySQL级联更新与级联删除详解 在数据库设计中,外键约束是维护数据完整性和一致性的重要手段之一。MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade ...

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

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

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

    "MySQL 中利用外键实现级联删除、更新" 在 MySQL 中,外键是指在一个表中的一列或多列,引用另一个表中的主键或唯一索引。外键可以强制实施数据的一致性和完整性,使得数据更加可靠。外键在 MySQL 中的实现主要是...

    MySQL使用外键实现级联删除与更新的方法

    本篇文章将详细讲解如何使用外键在MySQL中实现级联删除和更新。 首先,要使用外键,数据库表必须使用支持外键的存储引擎,如InnoDB。InnoDB引擎提供了事务处理、行级锁定以及外键约束等功能,是实现这些级联操作的...

    MySQL的约束-外键约束

    - **级联操作**:通过设置外键约束为`CASCADE`,可以实现级联删除或更新,这在维护数据一致性时非常有用。 - **ON DELETE 和 ON UPDATE 触发器**:可以指定当被参照记录被删除或更新时,如何处理外键字段。例如,`ON...

    掌握数据完整性:深入理解MySQL中的外键

    - **RESTRICT**:限制删除或更新操作,除非从属表中的外键字段已经被删除或更新。 例如,如果希望在删除部门时自动删除该部门的所有员工,可以定义如下外键: ```sql ALTER TABLE Employees ADD CONSTRAINT fk_...

    mysql外键的使用

    - CASCADE:级联操作,父表中的记录被删除或更新时,子表中对应的记录也会被删除或更新。 - RESTRICT:限制操作,父表记录被删除或更新时,如果子表中有相关记录,则阻止该操作,防止破坏引用完整性。 - SET NULL:...

    Mysql增加外键的方法

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

    MySQLSQL高级特性字段约束-索引-视图-外键学习实践.rar

    2. **级联操作**:当主键表数据发生变化时,外键表可以设置级联更新或级联删除,保持数据同步。 3. **限制性外键**:通过ON DELETE RESTRICT和ON UPDATE RESTRICT防止非法删除或更新。 4. **无限制外键**:通过ON ...

    mysql外键设置

    - **CASCADE**:级联操作,即当主表的记录被删除或更新时,从表中所有依赖于该记录的行也会被相应地删除或更新。 - **RESTRICT** 或 **NO ACTION**:默认行为,不允许删除或更新主表中的记录,如果这样做会违反外键...

    mysql内外键使用

    `ON DELETE CASCADE ON UPDATE CASCADE`的设置意味着,如果在`outTable`中删除或更新`id`,相应的`temp`表中的记录也会相应地被删除或更新。 接着,通过两个示例表格`pc`和`parts`,展示了如何在实际业务场景中应用...

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

    MySQL支持级联操作,当在父表中删除或更新一条记录时,可以决定是否也影响子表中的相关记录。例如,`ON DELETE CASCADE`会在父表记录删除时,删除所有相关子表记录;`ON UPDATE CASCADE`则在父表记录更新时,同步...

    MySQL数据库基础培训.pptx

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

    mysql外键教程.zip

    1. **级联(Cascade)**:当主表中的记录被删除或更新时,相关的子表记录也会按照预定义的方式进行相应的删除或更新。例如,如果设置了"CASCADE",主表中的记录被删除,那么所有引用该记录的子表记录也将被删除。 2...

    如何在MySQL数据库中定义外键

    ### 如何在MySQL数据库中定义外键 #### 定义数据表 ...综上所述,通过以上步骤,我们不仅可以在 MySQL 数据库中成功定义外键,还可以根据业务需求选择合适的级联操作来进一步增强数据的一致性和完整性。

    数据库MySQL基础知识点4

    添加和删除外键可通过`ALTER TABLE`语句完成,并可设置删除/更新行为,如CASCADE(级联)、RESTRICT(限制)等。 **外键的使用**确保了不同表之间的数据一致性。创建外键有两种方式:在已有表上添加或在创建表时...

    MySQL外键使用及说明详解

    3. 级联操作:在外键上定义的级联规则(如ON DELETE CASCADE或ON UPDATE CASCADE)可以在删除或更新父表记录时自动更新或删除子表的相关记录。 外键的定义语法如下: ```sql [CONSTRAINT symbol] FOREIGN KEY [id]...

    MySQL外键使用详解

    - **级联操作**:可以设置级联更新(on update cascade)和级联删除(on delete cascade),当父表中的主键值更改或删除时,相应子表的外键值也会自动更新或删除。 3. **外键的创建条件**: - **InnoDB存储引擎**...

Global site tag (gtag.js) - Google Analytics