gpt4 book ai didi

mysql 在插入时创建触发器使用 where 条件不起作用进行更新

转载 作者:行者123 更新时间:2023-11-29 14:25:16 25 4
gpt4 key购买 nike

我有一个关于插入触发器的订单行表正在工作,但在订单号表中我想根据序列号更新订单号

所以为了更新我写了两行

第 1 行:更新临时存储集ORDERNUMBER=orderno+1,SERIALNUMBER=serialno; 在没有 where 条件的情况下工作正常

第2行:更新订单号设置订单号=orderno+1 WHERESERIALNUMBER=serialno; 不起作用,任何人都可以建议我......如何根据 序列号

DELIMITER $$

USE `temp`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trg_updateordernumber`$$
CREATE TRIGGER `trg_updateordernumber` AFTER INSERT ON `ORDERLINES`
FOR EACH ROW BEGIN

DECLARE orderno VARCHAR(255);
DECLARE serialno VARCHAR(255);
SET @orderno = 'xxx';

SELECT ORDERNUMBER, SERIALNUMBER INTO orderno, serialno
FROM ORDERLINES
WHERE ID=NEW.ID;

UPDATE TEMPSTORAGE SET
`ORDERNUMBER` =orderno+1,
`SERIALNUMBER` =serialno;

UPDATE ORDERNUMBER SET
`ORDERNUMBER`=orderno+1
WHERE `SERIALNUMBER` = serialno;
END;
$$

DELIMITER ;

mysql触发器有什么问题吗(希望没有)....?如果没有,请告诉我为什么 line2 不起作用?

感谢和问候;

最佳答案

您需要 BEFORE INSERT 触发器,但不需要 AFTER INSERT

我不确定 ORDERLINESORDERNUMBER 表之间的关系,
但建议尝试以下方法(未经测试):

DELIMITER $$

USE `temp`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trg_updateordernumber`$$
CREATE TRIGGER `trg_updateordernumber` BEFORE INSERT ON `ORDERLINES`
FOR EACH ROW BEGIN
UPDATE TEMPSTORAGE SET
`ORDERNUMBER` =NEW.ORDERNUMBER+1,
`SERIALNUMBER` =NEW.SERIALNUMBER;

UPDATE ORDERNUMBER SET
`ORDERNUMBER`==NEW.ORDERNUMBER+1
WHERE `SERIALNUMBER` = NEW.SERIALNUMBER;
END;
$$

DELIMITER ;

关于mysql 在插入时创建触发器使用 where 条件不起作用进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100239/

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