我有一个像这样定义的表:
CREATE TABLE A (
begin date,
end date,
CONSTRAINT ordered_dates CHECK ( begin <= end)
)
..和2个相关的触发器:
在trigger1中,通过计算间隔(= end-begin)在第二个表B中插入。
如果不遵守约定ordered_dates,我在表B中插入了错误的值。 但是,约束似乎仅在更新期间检查,而不是在BEFORE触发器中。
我必须在之前和之前的trigger1中再次测试ordered_date ONCE吗?在触发器之前直接引发异常?我知道怎么做但我在某种程度上有代码重复。
答案 0 :(得分:2)
您的触发器在插入之前触发,因此它在应用约束之前获取值。
是的,您需要检查值或插入后应用触发器。
答案 1 :(得分:0)
这不是问题,因为当CHECK约束触发并失败时,事务将被中止,因此将(正确地)回滚到表B中的插入。