MYSQL 在事件调度程序中使用事务

MYSQL Using Transactions within an Event Schduler

我正在尝试在 MYSQL 的计划事件中使用交易,它不会排除整个交易,只有开始交易;部分。

我尝试过包装我的代码、删除分号、设置 autocommit = 0 并以多种方式修改我的代码,但均无济于事。我只是想知道如何 运行 完成 T运行 的交易并重新填充 t运行 的交易 table.

CREATE EVENT IF NOT EXISTS monitored_15min
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
DO

START TRANSACTION;

TRUNCATE dashboard.monitored;
INSERT INTO dashboard.monitored (brand,product,Status,old_Price,Current_Price,Product_Title)
SELECT
amp.brand,
amp.product,
amp.Status,
amp.old_Price,
amp.Current_Price,
Product_Title

FROM results.amp;

COMMIT;

我预计此查询每分钟都会删除 dashboard.monitored 的当前值并插入来自 results.amp 的信息,但除了事件中的整个查询外,没有任何反应。

如您所见,该事件仅包含启动交易的代码; (它将 运行 永远在你的系统上,直到你放弃或禁用)。该代码出现 运行 一次,但这只是因为它掉线了。 '与存储例程一样,您可以通过使用 BEGIN 和 END 关键字在 DO 子句中使用复合语句语法' (https://dev.mysql.com/doc/refman/8.0/en/create-event.html), 你的情况

delimiter $$
CREATE EVENT IF NOT EXISTS monitored_15min
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
DO
begin
START TRANSACTION;

TRUNCATE dashboard.monitored;
INSERT INTO dashboard.monitored (brand,product,Status,old_Price,Current_Price,Product_Title)
SELECT
amp.brand,
amp.product,
amp.Status,
amp.old_Price,
amp.Current_Price,
Product_Title

FROM results.amp;

COMMIT;
end $$
delimiter ;

有关详细信息,请参阅手册并确保您已启用事件调度程序。