[英]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.