gpt4 book ai didi

sql - 用触发器替换唯一约束

转载 作者:行者123 更新时间:2023-12-04 18:05:36 24 4
gpt4 key购买 nike

我需要用触发器替换唯一约束,但我发现了一个问题(我使用的是 DB2)。假设我有一个带有属性 A 整数的表 R。我定义了这个触发器(类似于更新):

CREATE TRIGGER R_A_UNIQUE
BEFORE INSERT ON R
REFERENCING NEW AS N
FOR EACH ROW
WHEN (EXISTS(SELECT * FROM R WHERE A = N.A))
SIGNAL SQLSTATE '70000' ('ATTRIBUTE A MUST BE UNIQUE');

它在正常情况下有效,但如果像这样添加多行:

INSERT INTO R VALUES (4),(4),(4);

所有值都插入没有问题!

我错过了什么吗?非常感谢

最佳答案

评论太长了。

insert 是单个事务。因此,表的状态在插入过程中不会改变。也就是说,触发器被调用但在表的原始版本上调用了 3 次。

这使得很难在触发器中实现诸如唯一约束之类的东西,以及可以同时处理多个插入的东西。我的建议是坚持使用唯一约束,不要尝试在触发器中重现它。

我应该补充一点,您可以使用“插入后”触发器来更改触发器的语义。但是,这将允许重复项进入表中,然后您将不得不删除它们。

关于sql - 用触发器替换唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432270/

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