繁体   English   中英

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

[英]how to use after insertion triggers in 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服务器版本相对应的手册以获取正确的语法,以在“在购买时插入每一行之后开始(在第一行中插入Sell(_date1,petrol1,diese)”之后)附近使用

您引用的MySQL 8文档页面

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

在触发器主体内,使用OLD和NEW关键字可以访问受触发器影响的行中的列。 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 ;

您似乎想要:

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 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM