簡體   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