触发器,用于在错误MySQL中插入/更新当前日期

时间:2019-02-19 13:55:58

标签: mysql triggers

我想为当前日期创建一个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)时,我遇到了同样的问题。

1 个答案:

答案 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字段转换为时间戳记字段,并在您更新表中的任何字段时保存时间戳记。