+--------+-------------+------+-----+---------+-------+
| 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'
答案 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 ;