gpt4 book ai didi

mysql - 如何组合触发器和事件并使事件使用特定的行 ID?

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

我有以下问题需要解决。我需要将行插入到“预订”表中,以便在插入时为自己设置一个计时器,然后在几分钟后检查这个新创建的行中的标志,看看它是否已从“待处理”更改为“已完成”(这将是由用户在干预期间的操作引起的)并且仍然“等待”将其从表中删除。

这里的想法是,人们正在进行预订,并且开始预订过程的行为会添加这一行,但是,如果他们在一段时间内未能完成购买,我想删除这些行以进行预订(数量有限)可供其他消费者使用。

所以,我一直在研究事件和触发器,并且我了解了两者的概念,但是我没有找到一种方法让触发器将*此行的 id 传递给事件,以便当事件发生时触发它只查看相关行,因为我不希望它注意到*所有可能“待处理”的行,因为其他消费者可能在干预期间为其他预订新创建了“待处理”行,并且显然,在它们各自的计时器到期之前,我不想搞乱它们。

所以...我希望(伪)是...

/*EVENT*/
CREATE EVENT IF NOT EXISTS delete_abandoned_pending_purchase
ON SCHEDULE AT CURRENT_TIMESTAMP + 5 minutes
DO
delete from tickets where state = 'PENDING' and id = [MY ROW ID]

然后...

/*trigger*/
CREATE TRIGGER remove_if_unused
AFTER INSERT ON `tickets` FOR EACH ROW
begin
[call delete_abandoned_pending_purchase with row_id MY_NEW_ROW_ID]
end

我猜我可能需要创建一个带有参数的存储过程,然后将该行 ID 作为参数传递?或者也许有一种更直接的方法...我只是找不到这种语法,并且希望得到一些指导。显然,我可以在包装此数据交互的业务逻辑中处理这个问题,但觉得这是一种更优雅的方法。

[编辑]

reading more about this“无法直接将参数传递给事件或从事件中传递参数;但是,可以使用事件中的参数调用存储的例程”。

但是建议调用存储过程并向其传递参数。但是,我的问题是我不知道如何在事件中获取 *at row.id 以传递给存储过程。我觉得我一定错过了一些明显的东西......事件怎么可能无法访问特定的行 ID?

[编辑编辑]所以,基于this我感觉这在 mySQL 中实际上是不可能的...这是一个令人遗憾的事情,也非常令人惊讶。看起来这是一件非常明显的事情。

我将保留这个问题,看看是否有人提出一个聪明的替代方案。

最佳答案

我建议您通过脚本来完成此操作,复杂性更低,控制更多。如下所示:

MaxSleep=300 # In seconds SleepTime=MaxSleep
while (1) {
sleep SleepTime; delete from TheTable where reserved = 'pending' and the_timestamp >= Current_Timestamp; SleepTime='mysql
'select the_timestamp from TheTable where reserved = 'pending' order
by the_timestamp limit 1"

if SleepTime is null then SleepTime= MaxSleep
}

关于mysql - 如何组合触发器和事件并使事件使用特定的行 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935528/

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