1

大家好,我正在尝试创建一个触发器,以便如果啤酒的价格上涨超过 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;

正如你所看到的,我使用了 FOR EACH ROW BEGIN 和 IF 语句但由于某种原因它不起作用,任何帮助将不胜感激

4

1 回答 1

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

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

看法 :

SELECT * FROM ripo_off_bar;

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

触发器创建和更新值

于 2013-11-20T13:27:31.210 回答