gpt4 book ai didi

php - MySQL跨表触发器

转载 作者:行者123 更新时间:2023-11-30 00:00:29 26 4
gpt4 key购买 nike

我有以下情况:

我有一个网络应用程序,可以为我工作的公司预留资源。已进行预留,资源状态更改为已预留等等。问题是,一旦保留该资源的时间和日期到期,我想自动将资源的状态再次更改为可用。

最简单且可能唯一可能的方法是通过触发器。触发器在某种程度上很容易做到,但我从未做过跨表触发器,甚至不知道它是否可能。

我很困惑目标表应该是哪个,时间、事件和定义应该是什么。

这是我的数据库架构:

enter image description here

很简单。我根据 schedule_intermediate 表的开始和结束时间进行预订,然后验证该资源是否可以在该特定时间和日期(用户要进行预订时指定的时间和日期)预订。预订)。

如果有空,则会显示并稍后进行预订。资源的状态更改为保留,并且到目前为止一切正常。

但是一旦日期和时间到期,我需要更改此资源的状态:

这是 phpmyadmin 上关于触发器的模式,我很困惑应该如何详细说明它:

enter image description here

如果有人能给我指导如何或多或少地做到这一点,我将非常感激。

最佳答案

不,触发器在这里帮不了你。当发生特定事件(例如更新行)时会触发触发器。但就您而言,当保留时间戳变成过去时,实际上没有任何变化,因此没有任何东西可以触发触发器。

这是数据库中的一个普遍问题。您将看到它突然出现了大量的实时事件数据。

您有几个选择:

  1. 作为应用程序的一部分,您可以设置维护作业每分钟运行一次,并对过去的所有内容运行更新。这样做的唯一真正优点是您不必更改数据库架构作为解决方案。

  2. (在我看来更好的选择)是将指示“可用”的字段设置为“下一个可用”时间戳。这样,“可用”就是“下一个可用”为空或在 now() 之前的任何内容。这种方式需要修改您的架构,但始终绝对是最新的,并且不需要额外的维护工作。

最终考虑

只有您知道本文所针对的业务。但是,您应该考虑如果有人没有按时返回资源会发生什么 - 数据库应该做什么以及它如何知道?

这种类型的示例很常见,针对预订有几个字段,用于记录实际事件( checkout 资源的实际时间、重新 checkin 的实际时间)。

请注意,如果您使用此模型,则可以在预订更新时创建一个触发器,检查实际 checkin 时间是否为 NOT NULL 并相应地更新资源。

关于php - MySQL跨表触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25084260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com