0

我在插入触发器上有一个表 orderlines 正在工作,但是在 ordernumber 表中我想根据序列号更新 ordernumber

所以对于更新我写了两行

第 1 行:UPDATE TEMPSTORAGE SETORDERNUMBER =orderno+1,SERIALNUMBER=serialno; 在没有 where 条件的情况下工作正常

第 2 行:UPDATE ORDERNUMBER SETORDERNUMBER =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 不工作?

谢谢并恭祝安康;

4

1 回答 1

1

您需要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 ;
于 2012-06-25T14:30:21.940 回答