嗨,伙计们,我想扣一个扳机,如果啤酒的价格涨了超过1美元,我就把酒吧的名字加在吧台上。

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_time=AFTER”。根据mysql手册:
在BEFORE触发器中,如果您对其具有更新权限,还可以使用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 into sells values("Root Beer", 2);

触发:
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";

在那之后,如果你看到里普酒吧外的桌子,你会看到已经添加了你最新的啤酒名称信息!:
视图:
SELECT * FROM ripo_off_bar;

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

关于mysql - 触发每行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15532064/

10-09 18:04
查看更多