在同一个表上更新之前或之后触发更新

时间:2018-04-02 10:57:32

标签: mysql datetime triggers timestamp

我有这张桌子:

Table: product

通过使用PHPMYADMIN,我正在考虑设置一个触发器,这样每当我对任何项目的价格进行更改时,它都会触发记录该特定项目的price_change_time的时间。

我的触发器是这样的:

DELIMITER //
CREATE TRIGGER update_time BEFORE UPDATE ON product
FOR EACH ROW
BEGIN
UPDATE product SET price_change_time = NOW() WHERE NEW.price <> OLD.price;
END; //
DELIMITER ;

可悲的是,这不起作用,我得到了:

MySQL said:Documentation

#1442 - Can't update table 'product' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我阅读了之前提出的一些问题和答案,这些问题和答案在某种程度上是相关的,但仍然不适合我的案例。

是谁愿意帮忙?我的问题是:

1) Is there any way to achieve what I want by just using PHPMYADMIN?
2) If Not then what is the proper way?

1 个答案:

答案 0 :(得分:0)

您可以在MySQL表something like this中创建一个列:

CREATE TABLE product (
...
price_change_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
...
);

这会在表中创建一个“魔术”列,只要其行首次被INSERTed或UPDATEd,就会更新到当前时间。

MySQL的最新版本,但不是旧版本,也适用于DATETIME列。

您可以使用DATE(price_change_time)仅检索时间戳的日期部分。