gpt4 book ai didi

MySQL 阻止使用外键插入

转载 作者:行者123 更新时间:2023-11-29 13:39:00 25 4
gpt4 key购买 nike

如果另一个表中的一个值与另一个表中的值匹配,但该值本身不是键,那么如何阻止 MySQL 中的 INSERT 或 UPDATE 操作?答案必须是外键约束,但我不确定它如何与多列以及非键字段一起工作。

我自己的情况是这样的:

给定此表 USERDATA 的以下值:

ID | USER_ID | UUID
1 29 aaa
2 29 bbb
3 30 ccc

此表在 INSERT 后与这些值建立关系,其中 userdata_uuid 引用 uuid,receiver_id 引用 user_id

ID | USERDATA_UUID | RECEIVER_ID
1 aaa 29
2 aaa 30
3 bbb 29
4 bbb 30
5 ccc 29
6 ccc 30

如何防止插入描述与自己的用户数据有关系的用户?有了这些数据,对 RELATIONS 执行 INSERT 后所需的结果将是:

ID | USERDATA_UUID | RECEIVER_ID
1 aaa 30
2 bbb 30
3 ccc 29

希望这是有道理的,谢谢。

最佳答案

您可以通过触发器来实现这一点。

CREATE TRIGGER tg_bi_relations
BEFORE INSERT ON relations
FOR EACH ROW
SET NEW.userdata_uuid = IF(EXISTS(
SELECT *
FROM userdata
WHERE uuid = NEW.userdata_uuid
AND user_id = NEW.receiver_id), NULL, NEW.userdata_uuid);

CREATE TRIGGER tg_bu_relations
BEFORE UPDATE ON relations
FOR EACH ROW
SET NEW.userdata_uuid = IF(EXISTS(
SELECT *
FROM userdata
WHERE uuid = NEW.userdata_uuid
AND user_id = NEW.receiver_id), NULL, NEW.userdata_uuid);

诀窍是,如果满足检查条件,则违反 NOT NULL 约束。

这里是SQLFiddle 演示
尝试一次取消最后两个插入和更新语句的注释。触发器不会让他们成功。

关于MySQL 阻止使用外键插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18370095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com