Mysql 每行的触发器

Mysql 每行的触发器,mysql,triggers,Mysql,Triggers,嗨,伙计们,我想触发一下,如果一瓶啤酒的价格上涨超过1美元,那么我就把酒吧的名称添加到RIPOFFBAR表中 CREATE TRIGGER PriceTrig AFTER UPDATE ON Sells FOR EACH ROW BEGIN IF (NEW.price > OLD.price + 1.00) THEN INSERT INTO RipoffBars(bar) VALUES(NEW.bar); END IF; END; 正如你们所看到的,我用IF语句开始每一行 但是

嗨,伙计们,我想触发一下,如果一瓶啤酒的价格上涨超过1美元,那么我就把酒吧的名称添加到RIPOFFBAR表中

CREATE TRIGGER PriceTrig
 AFTER UPDATE ON Sells
 FOR EACH ROW
BEGIN
IF (NEW.price > OLD.price + 1.00)
THEN
INSERT INTO RipoffBars(bar)
 VALUES(NEW.bar);
 END IF;
 END;
正如你们所看到的,我用IF语句开始每一行
但是由于某些原因,它不起作用。如果您在尝试更新行时,在“之后使用了“trigger\u time=AFTER”,则非常感谢您的帮助。根据mysql手册:

在BEFORE触发器中,如果您对其具有更新权限,还可以使用SET NEW.col_name=value更改其值。这意味着您可以使用触发器修改要插入新行或用于更新行的值<代码>(这样的SET语句在AFTER触发器中无效,因为行更改将已经发生。)

有关详细信息,请从此处查看手册:

我已经创建了两个表,插入数据并根据您的信息写入触发器:

创建表格:

DELIMITER $$

CREATE TRIGGER price_update BEFORE UPDATE ON sells

FOR EACH ROW 

BEGIN 

IF(NEW.beer_price > OLD.beer_price + 1) THEN  

INSERT INTO ripo_off_bar (beer_name) VALUES (NEW.beer_name);

END IF;

END;$$
表1:
create表seals(beer_name varchar(200),beer_price int(20))

表2:
create Table ripo_off_bar(beer_name varchar(200))

插入:

Insert into sells values("Root Beer", 2);
update sells SET beer_price=8 where beer_name="Root Beer";
SELECT * FROM ripo_off_bar;
触发器:

DELIMITER $$

CREATE TRIGGER price_update BEFORE UPDATE ON sells

FOR EACH ROW 

BEGIN 

IF(NEW.beer_price > OLD.beer_price + 1) THEN  

INSERT INTO ripo_off_bar (beer_name) VALUES (NEW.beer_name);

END IF;

END;$$
更新:

Insert into sells values("Root Beer", 2);
update sells SET beer_price=8 where beer_name="Root Beer";
SELECT * FROM ripo_off_bar;
之后,如果您查看ripo_off_酒吧表,您将看到添加了更新的啤酒名称信息!:

查看:

Insert into sells values("Root Beer", 2);
update sells SET beer_price=8 where beer_name="Root Beer";
SELECT * FROM ripo_off_bar;
我还添加了代码的截图。希望这些将帮助您完成任务。快乐编码