【发布时间】:2012-01-03 03:20:51
【问题描述】:
我想问一个关于触发器的问题。假设我有一个表 T 并且在更新之前我需要一个触发器。但是,我有一个问题。我需要使用触发器中的其他 T 行来检查条件。我的问题是:哪个 RDBMS 支持这个?我在哪里可以编写在触发器触发的同一个表上执行选择的触发器。例如:
CREATE TRIGGER updtrigger BEFORE UPDATE ON Employee
-> FOR EACH ROW
-> BEGIN
-> IF NEW.Salary<=500 THEN
-> SET NEW.Salary=10000;
-> ELSEIF NEW.Salary>500 and NEW.Salary < 600 THEN
-> SET NEW.Salary=15000;
-> ELSEIF NEW.Salary > (select MAX(Salary) from Employee)
-> Set NEW.Salary = 601;
-> END IF;
-> END
-> //
谢谢,
最好的问候,
拉霍斯阿尔帕德。
【问题讨论】:
-
这似乎很危险,充其量。我不确定是否有任何 rdbms 允许这样做。允许在
FOR EACH ROW更新过程中对同一个表进行查询将允许在触发器中打开数据不一致的可能性。无法保证更新行的顺序。 -
我理解这个问题,但可能需要这样做,例如,如果您想自动消除某些类型的不一致,则需要这些触发器。您的触发器如何在没有选择的情况下确定您的行是否与其他行不一致?如果您知道自己在做什么,这并不危险,但是对于那些不知道自己在做什么的人来说,这很危险。