0
我有一个简单的预订表:如何写一个触发器,以防止预订日期重合
什么是写一个触发器,将禁止与另一个预订预订重叠插入正确的方式?
基本上,我不能有2个预订相互重叠。
有没有一种广义的方法来解决这个问题?
我有一个简单的预订表:如何写一个触发器,以防止预订日期重合
什么是写一个触发器,将禁止与另一个预订预订重叠插入正确的方式?
基本上,我不能有2个预订相互重叠。
有没有一种广义的方法来解决这个问题?
写触发ON INSERT OR UPDATE
当以下条件为真抛出异常:
EXISTS
(
SELECT 1
FROM bookings
WHERE date_start <= NEW.date_end
AND date_end >= NEW.date_start
AND (INSERTING OR id <> NEW.id)
)
的date_start <= NEW.date_end AND date_end >= NEW.date_start
条件将匹配任何现有的重叠与新纪录。在UPDATE情况下,INSERTING OR id <> NEW.id
条件将排除当前记录(否则它总是与自身重叠)。
请注意,如果您愿意,您可以删除最后一个条件并使用两个单独的触发器 - 一个用于INSERT,一个用于UPDATE。
您可能需要根据您的RDBMS更改确切的查询,但逻辑应该相同。请注意,通常情况下,从触发器中抛出异常将导致事务回滚,并且新的预订不被允许。
我们在谈论什么数据库服务器? (具体而言,至少是品牌和版本,但也可能是操作系统等) – Wolph
任何,真的。我只是对抽象方法感兴趣。 – Tool
这个逻辑不应该存在于你的应用程序中吗? – Lock