Mysql 创建一个触发器,需要在更新表1时更新表2
想在mysql中创建一个触发器需要 更新t2.inactivedate时将t2.orderstatus更新为“非活动”,并 在更新t2.activedate时将t2.orderstatus更新为“活动”。试图适应低于1的环境。但失败了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
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之间有一个空间;编辑。已更改的结尾;$$结束$$