处理 MySQL 中的重叠日期范围
将新日期范围插入到现有表中可能会很棘手,尤其是在尝试防止与现有条目。在这种情况下,我们希望避免插入与特定帐户标识符 (acc_id) 的数据库中的范围重叠的范围。
虽然 MySQL 提供了使用 SQL CHECK 约束来验证日期的选项,但遗憾的是,该功能并未提供由 MySQL 支持。另一方面,PostgreSQL 支持 CHECK 约束,但切换数据库引擎可能并不适用于所有情况。
作为替代方案,我们可以在应用程序逻辑中实现验证。一种方法是在尝试 INSERT 之前使用 SELECT COUNT(id) ... 语句检查重叠:
SELECT COUNT(id) FROM avail WHERE acc_id = '175' AND (start_date BETWEEN '2015-05-30' AND '2015-06-04') OR (end_date BETWEEN '2015-05-30' AND '2015-06-04') OR ('2015-05-30' BETWEEN start_date AND end_date) OR ('2015-06-04' BETWEEN start_date AND end_date);
如果返回的计数大于 0,则由于重叠而中止插入。
另一种方法涉及使用MySQL 中的触发器。可以对触发器进行编程,以在发生 INSERT/UPDATE 之前检查重叠,并在发现任何重叠时抛出错误。然而,触发器需要最新的 MySQL 版本。
最终,方法的选择取决于应用程序的具体要求以及以受支持的方式之一实现它的可行性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3