首页 > 数据库 > mysql教程 > 如何使用触发器更新同一个表中的行:重叠时间段的解决方案?

如何使用触发器更新同一个表中的行:重叠时间段的解决方案?

Patricia Arquette
发布: 2024-10-28 17:15:29
原创
562 人浏览过

How to Update Rows in the Same Table Using Triggers: A Solution to Overlapping Time Periods?

使用触发器更新同一个表中的另一行

问题:

维护记录时间段重叠的情况通常需要在插入起始日期与现有范围重叠的新记录时更新先前记录的结束日期。

原始尝试:

提供的触发器尝试使用值 ADDDATE(NEW.startDate, -1) 更新现有行的 endDate,其中 procKey 与新行匹配且 endDate 为 20501231。但是,此方法会导致错误“无法更新表“拆分”在存储函数/触发器中,因为它已被调用此存储函数/触发器的语句使用。”

解决方案:

不幸的是,触发器不能直接更新与触发触发器的行相同的表中的其他行。相反,需要另一种方法。

使用存储过程:

创建一个封装以下逻辑的存储过程:

  1. 将新行插入或更新到拆分表中。
  2. 使用与 NEW 行匹配的 procKey 和与未来日期(例如 20501231)匹配的 endDate 更新前一行的 endDate 为 ADDDATE(NEW. startDate, -1)。
  3. 提交事务以确保更改是持久的。

此方法允许在单个事务中更新同一个表中的多行,从而避免触发器可能会产生冲突。

以上是如何使用触发器更新同一个表中的行:重叠时间段的解决方案?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板