正如问题所暗示的,我需要在 MySQL 事件中声明一个 @var = 1 变量:
DELIMITER $
SET @check_before_update = 1 $
DROP EVENT IF EXISTS expire_product_from_shop $
CREATE
EVENT IF NOT EXISTS expire_product_from_shop
ON SCHEDULE EVERY 2 MINUTE STARTS now()
DO BEGIN
SET @check_before_update = 0;
UPDATE Xdb.shop_product_m2m as m2m
SET m2m.expired=1 WHERE m2m.expires <= now();
SET @check_before_update = 1;
END $
DELIMITER ;
因此,当我使用触发器时,我可以在“更新之前”抵制更新触发器:
DROP TRIGGER IF EXISTS shop_product_m2m_before_update $
CREATE TRIGGER shop_product_m2m_before_update
BEFORE UPDATE ON shop_product_m2m
FOR EACH ROW
BEGIN
IF @check_before_update != 0 THEN
SET NEW.modified = NOW();
SET NEW.expired = 0;
SET NEW.expires =ADDDATE(NEW.modified, INTERVAL 15 DAY);
END IF ;
END$
我想要一个从事件设置的会话变量,并在因事件触发触发器时找到。正如您在问题中注意到的那样:我正在尝试运行一个事件并且该事件导致更新前触发器被辞退了 !为此,我的一些其他意图被违反了。为了防止这种情况发生,我需要那个@check_before_update 变量。谢谢