Mysql 创建一个触发器,需要在更新表1时更新表2

Mysql 创建一个触发器,需要在更新表1时更新表2,mysql,triggers,Mysql,Triggers,想在mysql中创建一个触发器需要 更新t2.inactivedate时将t2.orderstatus更新为“非活动”,并 在更新t2.activedate时将t2.orderstatus更新为“活动”。试图适应低于1的环境。但失败了 DROP TRIGGER IF EXISTS trigger_on_stockhistory_update; DELIMITER $$ CREATE TRIGGER trigger_on_stockhistory_update AFTER update ON st

想在mysql中创建一个触发器需要 更新t2.inactivedate时将t2.orderstatus更新为“非活动”,并 在更新t2.activedate时将t2.orderstatus更新为“活动”。试图适应低于1的环境。但失败了

DROP TRIGGER IF EXISTS trigger_on_stockhistory_update;
DELIMITER $$
CREATE TRIGGER trigger_on_stockhistory_update
AFTER update ON stockhistory.inactivedate
FOR EACH ROW
BEGIN
    UPDATE  mastersku
    SET ordernow ='InActive'
    WHERE   `SSKU`  = NEW.SSKU;

END;
$$
DELIMITER;

不能在字段更改时设置触发器。它可能仅在表级别:

DROP TRIGGER IF EXISTS trigger_on_stockhistory_update;
DELIMITER $$

CREATE
    TRIGGER `trigger_on_stockhistory_update` AFTER UPDATE
    ON `stockhistory`
    FOR EACH ROW BEGIN
    IF OLD.inactivedate <> NEW.inactivedate THEN
        UPDATE  mastersku
        SET ordernow ='InActive'
        WHERE   `SSKU`  = NEW.SSKU;
    END IF;

    IF OLD.activedate <> NEW.activedate THEN
        UPDATE  mastersku
        SET ordernow ='Active'
        WHERE   `SSKU`  = NEW.SSKU;
    END IF;
    END$$

DELIMITER ;
或者使用CASE语句进行一些优雅的查询:

DROP TRIGGER IF EXISTS trigger_on_stockhistory_update;
DELIMITER $$

CREATE
    TRIGGER `trigger_on_stockhistory_update` AFTER UPDATE
    ON `stockhistory`
    FOR EACH ROW BEGIN
        UPDATE  mastersku
        SET ordernow = CASE
            WHEN OLD.inactivedate <> NEW.inactivedate THEN 'InActive'
            WHEN OLD.activedate <> NEW.activedate THEN 'Active' 
            ELSE ordernow
        END
        WHERE
          SSKU = NEW.SSKU;

    END$$

DELIMITER ;

在分隔符和之间需要一个空格;这仍然会失败,因为它必须是相同的错误分隔符;在DELIMIER和DELIMIER之间有一个空间;编辑。已更改的结尾;$$结束$$