简述
mysql 企业表和员工表,一旦企业下面有员工就不允许删除企业。如何通过外键设置实现呢
前情提示
系统:
一说
- 部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤
- 带有
#号、删除线、不操作、不执行
字样的为提示或者备份bash,实际不执行 - 如果无法下载、无法复制,请评论后留言即可。收到消息后会第一时间回复~
- 知识付费,1对1技术支持:
有账号的朋友,可以点个赞或者评论两句哦,评论后会获得积分奖励~
要实现当企业表(比如 companies
)中有员工记录存在时,不允许删除该企业记录,你可以使用 MySQL 中的外键约束,并设置为 RESTRICT
级联操作。这将阻止在有依赖项的情况下删除主表中的记录。
首先,假设你有两个表:
companies
表:存储企业信息employees
表:存储员工信息,其中包含一个外键指向companies
表的id
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
);
在这个例子中,我们在 employees
表上定义了一个外键 company_id
,它引用了 companies
表的 id
列。通过设置 ON DELETE RESTRICT
,当你尝试从 companies
表中删除一个企业时,如果该企业还有相关的员工记录存在,MySQL 将拒绝执行删除操作。
请注意,如果你正在使用的数据库系统不支持外键或者你的项目规范要求不在数据库层面上强制数据完整性,那么你需要在应用程序层面实现这种逻辑,确保在删除企业之前先检查并处理好相关的员工记录。
ON DELETE CASCADE
和 ON DELETE RESTRICT
是 MySQL 中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时,子表中相关记录的处理方式。
- ON DELETE CASCADE:
- 当在主表中删除一条记录时,所有与之相关的子表中的匹配记录也会被自动删除。
- 这通常用于强耦合的关系,其中父表和子表的数据紧密相连,删除父表的记录时通常也期望删除子表的相关记录。
- 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 将拒绝执行删除操作。你需要先处理好员工记录才能成功删除公司记录。
标签:删除,记录,INT,companies,外键,员工,企业,id,DELETE From: https://blog.51cto.com/janeyork/8791290