如何防止 MySQL 中的日期范围重叠?

Linda Hamilton
发布: 2024-10-27 10:09:30
原创
785 人浏览过

How to Prevent Date Range Overlaps in MySQL?

处理 MySQL 中的重叠日期范围

将新日期范围插入到现有表中可能很棘手,尤其是在尝试防止与现有条目。在这种情况下,我们希望避免插入与特定帐户标识符 (acc_id) 的数据库中的范围重叠的范围。

虽然 MySQL 提供了使用 SQL CHECK 约束来验证日期的选项,但遗憾的是,该功能并未提供由 MySQL 支持。另一方面,PostgreSQL 支持 CHECK 约束,但切换数据库引擎可能并不适用于所有情况。

作为替代方案,我们可以在应用程序逻辑中实现验证。一种方法是在尝试插入之前使用 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 版本。

最终,方法的选择取决于应用程序的具体要求以及以受支持的方式之一实现它的可行性。

以上是如何防止 MySQL 中的日期范围重叠?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!