我想为当前日期创建一个update/insert
触发器(以保存上次修改时的时间戳)。因此,由于我读到您无法定义update/insert
触发器,但是我需要为此定义两个触发器,因此我开始使用insert
触发器。
我确实有以下代码:
drop table if exists test;
CREATE TABLE IF NOT EXISTS test (
id int,
mydate datetime not null default now(),
ts datetime
);
DELIMITER $$
DROP TRIGGER IF EXISTS update_test_timestamp;
CREATE TRIGGER `update_test_timestamp`
AFTER INSERT ON `test`
FOR EACH ROW
BEGIN
UPDATE `test` SET `ts` = CURRENT_TIMESTAMP WHERE `id` = NEW.id;
END $$
DELIMITER ;
INSERT INTO test (id) VALUES (1);
基本上,我想保存创建时的时间戳和“ lastupdate”时间戳(ts
)。可悲的是他出错了:
错误代码:1442。无法更新存储的函数/触发器中的表“ test” 因为调用该存储的语句已使用它 功能/触发。
我做错了什么?当我尝试将其修改为update
触发器(而不是insert
)时,我遇到了同样的问题。
答案 0 :(得分:1)
您不需要UPDATE
子句。您可以使用
SET NEW.
ts = CURRENT_TIMESTAMP();
理想情况下,如果您希望每个更新都有自动时间戳,可以像这样修改表。
ALTER TABLE `test`
CHANGE COLUMN `ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
这会将您的ts
字段转换为时间戳记字段,并在您更新表中的任何字段时保存时间戳记。