触发每一行

时间:2013-03-20 18:41:03

标签: 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语句中使用FOR EACH ROW BEGIN 但由于某种原因它不起作用任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

你做的第一个错误是使用"尝试更新行时,trigger_time = AFTER" 。根据mysql手册:

在BEFORE触发器中,如果您具有UPDATE权限,还可以使用SET NEW.col_name = value更改其值。这意味着您可以使用触发器来修改要插入新行或用于更新行的值。 (Such a SET statement has no effect in an AFTER trigger because the row change will have already occurred.)

有关详细信息,请从此处查看手册: http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html

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

创建表格

表1:create table sells (beer_name varchar(200),beer_price int(20));

表2:create table ripo_off_bar (beer_name varchar(200));

INSERT:

Insert into sells values("Root Beer", 2);

TRIGGER:

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;$$

更新:

update sells SET beer_price=8 where beer_name="Root Beer";

之后,如果您查看 ripo_off_bar表,您会看到已添加更新的beer_name信息!:

查看:

SELECT * FROM ripo_off_bar;

我添加了编码的截图。希望这些能帮助您完成任务。快乐的编码!!!

Trigger Creation & Updated value