简简单单说外键和级联

外键与级联操作详解
本文介绍了数据库中外键的概念,包括定义、作用、主表和从表的关系,以及建键原则。通过实例展示了外键如何限制数据操作,强调了其在保持数据一致性、完整性和关联性中的作用。此外,讨论了外键约束的事件触发限制,如级联、不执行、设置NULL和设置默认值,并提供了级联删除的实现方法。

  • 外键
    • 定义
    • 作用
    • 主表和从表
    • 建键原则
    • 事件触发限制
  • 外键简单实例
  • 触发器实现
    • 建表语句
    • 关系说明
    • 实现级联删除
  • 更改设置实现
  • 总结

文首

### 的默认级联操作行为 在定义中,默认情况下,MySQL 的 `InnoDB` 存储引擎不会自动设置任何级联操作[^1]。这意味着如果父表中的记录被删除或更新,子表中的相关记录不会受到影响,除非显式指定了 `ON DELETE CASCADE` 或 `ON UPDATE CASCADE`。 当创建约束时,如果没有指定具体的动作(如 `CASCADE`, `SET NULL`, `RESTRICT`, 或 `NO ACTION`),则会采用默认的行为 `RESTRICT`[^5]。这种行为阻止了可能导致数据一致性的破坏的操作。例如,在尝试删除或更新父表中的记录时,如果存在依赖于该记录的子表条目,则操作会被拒绝。 #### 创建带有约束的表 以下是创建具有关系并启用级联操作的一个例子: ```sql CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; CREATE TABLE child ( id INT NOT NULL, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE -- 明确声明级联删除 ) ENGINE=INNODB; ``` 上述代码片段展示了如何通过 `ON DELETE CASCADE` 来实现当父表中的某一条记录被删除时,子表中对应的关联记录也会随之删除的功能。 需要注意的是,虽然可以扩展标准 SQL 定义允许引用非唯一作为目标的情况,但这属于某些存储引擎特有的功能,并不是 ANSI/ISO SQL 标准的一部分[^2]。 另值得注意的一点是关于并发性能优化方面,在较新的版本如 MySQL 8.0.27 及以上可以通过调整参数来控制 DDL 操作期间使用的线程数从而提高效率[^4]。不过这与当前讨论的主题即及其默认行为无直接联系。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值