mysql的ON DELETE CASCADE 和ON DELETE RESTRICT区别

​ON DELETE CASCADE​​​ 和 ​​ON DELETE RESTRICT​​ 是 MySQL 中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时,子表中相关记录的处理方式。

  1. ON DELETE CASCADE:
  • 当在主表中删除一条记录时,所有与之相关的子表中的匹配记录也会被自动删除。
  • 这通常用于强耦合的关系,其中父表和子表的数据紧密相连,删除父表的记录时通常也期望删除子表的相关记录。
  1. ON DELETE RESTRICT:
  • 当试图从主表中删除一条记录时,如果存在相关的子表记录,MySQL 将阻止删除操作。
  • 这是一种数据完整性保护措施,确保不会因为删除主表的记录而留下孤立的子表记录。
  • 如果需要删除主表记录,必须先手动删除或更新子表的相关记录。

举例说明:

假设有一个公司(​​companies​​)表和一个员工(​​employees​​)表,员工表通过外键关联到公司表。

  • 使用 ON DELETE CASCADE
CREATE TABLE companies (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL
);

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    company_id INT,
    FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
);

在这种情况下,当你删除一家公司时,与其相关的所有员工记录也会被自动删除。

  • 使用 ON DELETE RESTRICT
CREATE TABLE companies (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL
);

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    company_id INT,
    FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE RESTRICT
);

在这种情况下,如果你试图删除一家公司,但这家公司仍有员工记录存在,MySQL 将拒绝执行删除操作。你需要先处理好员工记录才能成功删除公司记录。

相关推荐

  1. msSQLMySQL区别

    2023-12-17 06:28:05       73 阅读
  2. MysqlOracle区别

    2023-12-17 06:28:05       59 阅读
  3. mysqlredis区别

    2023-12-17 06:28:05       41 阅读
  4. MySQLRedis区别

    2023-12-17 06:28:05       29 阅读
  5. mysqlpostgreSQL区别

    2023-12-17 06:28:05       25 阅读
  6. MySql】SQLiteMySQL区别

    2023-12-17 06:28:05       39 阅读
  7. Mysql】myisaminnodb区别

    2023-12-17 06:28:05       53 阅读
  8. MySQL_15.UNDOREDO区别

    2023-12-17 06:28:05       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-17 06:28:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-17 06:28:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-17 06:28:05       82 阅读
  4. Python语言-面向对象

    2023-12-17 06:28:05       91 阅读

热门阅读

  1. 计算机网络英文总结

    2023-12-17 06:28:05       51 阅读
  2. B+树和索引

    2023-12-17 06:28:05       48 阅读
  3. 前端传值及本地存储方式的简单介绍

    2023-12-17 06:28:05       56 阅读
  4. ES如何提高准确率之【term-centric】

    2023-12-17 06:28:05       51 阅读
  5. 使用docker实现logstash同步mysql到es

    2023-12-17 06:28:05       68 阅读
  6. Node.js

    Node.js

    2023-12-17 06:28:05      51 阅读
  7. Canvas学习笔记

    2023-12-17 06:28:05       63 阅读
  8. 第十六章 : Spring Boot JWT 集成redis实现分布式token

    2023-12-17 06:28:05       50 阅读
  9. Appium:一款强大的移动应用自动化测试工具

    2023-12-17 06:28:05       59 阅读
  10. Pandas实践_变形

    2023-12-17 06:28:05       47 阅读