在SQL中插入触发器后如何使用

时间:2018-11-08 16:47:45

标签: mysql sql

+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| _date  | varchar(20) | NO   | PRI | NULL    |       |
| petrol | int(11)     | NO   |     | NULL    |       |
| diesel | int(11)     | NO   |     | NULL    |       |
| gas    | int(11)     | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| _date1  | varchar(20) | NO   | PRI | NULL    |       |
| petrol1 | int(11)     | NO   |     | NULL    |       |
| diesel1 | int(11)     | NO   |     | NULL    |       |
| gas1    | int(11)     | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

我是触发器和SQL方面的新手,想在插入触发器后使用,以便一旦我在上述表“购买”中输入值。插入的相同值必须插入“ Sell”表中(也如上所述),但必须经过数学运算后:

petrol+petrol*0.3, diesel+diesel*0.15, gas+gas*0.25

我试图用这个:

CREATE TRIGGER t1
AFTER INSERT
ON buy
FOR EACH ROW
BEGIN
(
    INSERT INTO Sell (_date1, petrol1, diesel1, gas1)
    SELECT _date, petrol+petrol*0.3, diesel+diesel*0.15, gas+gas*0.25
    FROM inserted
)
END

但是,它在下面显示了此错误:

  

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在插入后使用'   购买时   每行   开始   (在第1行中插入Sell(_date1,petrol1,diese'

2 个答案:

答案 0 :(得分:2)

Your Referenced MySQL 8 Document page

读下来,您会发现以下两个语句:

  

在触发器主体内,OLD和NEW关键字使您可以访问   受触发器影响的行中的列。新旧是MySQL   触发器的扩展;它们不区分大小写。

     

在INSERT触发器中,只能使用NEW.col_name。没有老   行。在DELETE触发器中,只能使用OLD.col_name。没有   新行。在UPDATE触发器中,可以使用OLD.col_name来引用   行更新前的列和要引用的NEW.col_name   行更新后的列。

因此,我完全同意@Gordon Linoff

您正在寻找的是:

DELIMITER $$
CREATE TRIGGER t1 AFTER INSERT ON buy FOR EACH ROW
BEGIN
    INSERT INTO Sell (_date1, petrol1, diesel1, gas1)
    VALUES (NEW._date, NEW.petrol * 1.3, NEW.diesel * 1.15, NEW.gas * 1.25);
END $$
DELIMITER ;

答案 1 :(得分:1)

您似乎想要:

delimiter $$
create trigger t1 after insert on buy for each row
begin
    insert into Sell (_date1, petrol1, diesel1, gas1)
        values (new._date, new.petrol * 1.3, new.diesel * 1.15, new.gas * 1.25)
end;$$

delimiter ;