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

时间:2012-06-19 11:45:58

标签: mysql database triggers

我在插入触发器上有一个表顺序,但是在ordernumber表中我想根据serialnumber更新ordernumber

所以对于更新,我写了两行

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

第2行:UPDATE ORDERNUMBER SET ORDERNUMBER =orderno+1 WHERE SERIALNUMBER = serialno;         没有工作可以任何机构建议我....如何更新ordernumber基于         序列号

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触发器有什么问题(希望不是)....? 如果不是那么plz建议我为什么line2不工作?

谢谢和问候;

1 个答案:

答案 0 :(得分: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 ;