[英]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)”之后)附近使用
向下阅读,您会发现以下两个语句:
在触发器主体内,使用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.