问题:
给定一个表日期范围可用性 (avail),任务是仅在新日期范围不与给定帐户 ID (acc_id) 的任何现有日期范围重叠时将新日期范围插入表中。
建议的解决方案使用单个插入语句:
虽然在单个插入语句中完成此操作可能很诱人,但遗憾的是,仅在 MySQL 中无法直接实现。
替代方案方法:
SQL CHECK 约束(MySQL 不支持):
SQL CHECK 约束是强制执行此类重叠的首选方法验证。但是,MySQL 不支持 CHECK 约束。
PostgreSQL CHECK 约束:
PostgreSQL 支持表上的 CHECK 约束。如果切换到 PostgreSQL 是一个可行的选择,可以考虑这种方法。
MySQL 触发器:
MySQL 触发器可用于检查在插入或更新操作之前重叠。但是,这需要最新的 MySQL 版本。
应用程序逻辑:
通常,重叠验证在应用程序逻辑中执行。 SELECT COUNT(id) ... 语句可用于检查违反新条目的行。如果计数大于 0,则插入或更新将中止。
其他注意事项:
结论:
虽然单个插入语句在 MySQL 中可能不可行,但 PostgreSQL CHECK 约束、MySQL 触发器或应用程序逻辑等替代方法可以提供可靠的重叠验证。
以上是以下是一些标题,其中包含问题并重点关注核心问题: * 如何将日期范围插入MySQL而不重叠? * MySQL 日期范围插入:避免重叠 - 解决方案a的详细内容。更多信息请关注PHP中文网其他相关文章!