mysql中外键更新时set null用法

一、看案例

上表中,音乐审核表中 引用了 管理员 id 和 音乐id 字段,不难理解。事务的要求是 管理员对音乐的审核。

如何我们使用了RESTRICT限制性约束的话,admin和music的id不能为null,如何我们使用 删除时、或更新时setnull,则需要开启为null的约束。

二、外键约束讲解

在MySQL数据库中,外键约束可以设置4个不同的操作选项来处理主键表中发生更改或删除的行所引用的外键表中的行。这些选项包括CASCADE、NO ACTION、RESTRICT和SET NULL。

下面是这些操作选项的详细说明:

CASCADE

当在主键表中更新或删除行时,CASCADE选项会自动更新或删除外键表中相关的行。例如,如果在主键表中删除了一行,那么与该行相关的所有外键表中的行也将被删除。

NO ACTION

使用NO ACTION选项时,如果尝试在主键表中更新或删除行时,将不会发生任何操作,直到删除或更新相关的外键表中的行。如果没有这样的行,则允许在主键表中更新或删除行。

RESTRICT

如果使用RESTRICT选项,当试图在主键表中删除或更新行时,如果在外键表中还有相关的行,则会阻止此操作。这种情况下,必须首先从外键表中删除相关的行,然后才能在主键表中执行删除或更新操作。

SET NULL

如果使用SET NULL选项,当在主键表中更新或删除行时,与该行相关的外键表中的所有行将设置为NULL值。例如,如果在主键表中删除了一行,则与该行相关的所有外键表中的行将设置为NULL值。

总之,外键约束操作选项是一种非常有用的功能,可以帮助保护数据库的完整性,确保数据表之间的关系得到正确维护。

三、代码样例

假设我们有两个表:authors(作者)和 books(书籍)。books 表中有一个外键 author_id,它指向 authors 表中的主键 id。现在,我们想要设置当删除或更新 authors 表中的记录时,将 books 表中对应的 author_id 设置为 NULL。

创建两张表

CREATE TABLE authors (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE books (
    id INT PRIMARY KEY,
    title VARCHAR(100),
    author_id INT,
    FOREIGN KEY (author_id) REFERENCES authors (id) ON UPDATE SET NULL ON DELETE SET NULL
);

数据插入

INSERT INTO authors (id, name) VALUES (1, 'John Smith');
INSERT INTO books (id, title, author_id) VALUES (101, 'Book 1', 1);
INSERT INTO books (id, title, author_id) VALUES (102, 'Book 2', 1);

主表主键更新时

UPDATE authors SET id = 100 WHERE id = 1;

这将导致 books 表中 author_id 为 1 的记录被更新为 NULL。

四、总结

在一些主表需要用从表做约束时,我们主要考虑是否设置为”限制RESTRICT“、”为空SET NULL“,这样就能避免在从表数据字段被更新或删除时导致 主表操作失效。

在单表备份操作时,如果开发人员对业务存疑,先将约束都改为SET NULL(个人观点,接受指正)

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值