TRIGGERS:获取有关要更新的行的信息

时间:2014-10-10 16:04:54

标签: mysql triggers

假设我在表格中有以下字段组成一个唯一键:(productid varchar(30),dateset date,dateend date)

我打算将dateend设为null,直到插入了具有相同productid和更新日期集的另一行,如下所示:

+----------+-------------+-------------+
|productid | dateset     | dateend     |
+----------+-------------+-------------+
|'PRODUCTA'|'2014-10-09' | NULL        |
+----------+-------------+-------------+
|'PRODUCTA'|'2009-08-06' |'2014-10-09' |
+----------+-------------+-------------+

现在,我正在考虑如何安全地执行此操作,并且我想在插入新行之前运行触发器。它基本上会找到当前的max(dateset),其中productid = @productid,如果它存在,它将使用@newdateset更新此行的dateend,@ newdateset是插入新的后续行的日期。问题是,我不知道如何获得变量@productid或@newdateset。有没有办法获取现在即将插入的行的信息?如果我写道:

insert into products (productid, dateset) values ('DEMOA', '2014-10-10')

如何让我的触发器说@productid ='DEMOA',@ newdateset ='2014-10-10'?

谢谢,

Zakiir

1 个答案:

答案 0 :(得分:0)

要引用现在即将更新的行中的列,您可以编写NEW.col_name,在我的情况下:

NEW.productid

会引用DEMOA'在以下插入语句中:

insert into products (productid, dateset) values ('DEMOA', '2014-10-10');

像这样:

delimiter //

CREATE TRIGGER update_row_version BEFORE INSERT ON products 
FOR EACH ROW
BEGIN 
SELECT productid, max(dateset) INTO @productid, @maxdateset FROM products WHERE productid = NEW.productid; 
END;//

delimiter ;

INSERT INTO products (productid, price_local) VALUES ('DEMOA', 3000.00);

select @productid;

+-----------+
| @productid|
+-----------+
| DEMOA     |
+-----------+

显然,我试图实现的目标是不可能的,因为触发器不允许我更新我试图插入的同一个表(错误1442)。已经有关于它的帖子了:

mysql trigger stored trigger is already used by statement which invoked stored trigger