简体   繁体   English

MySQL“更新时间戳”列 - 触发器

[英]MySQL 'Update Timestamp' Column - Trigger

I'm adding a column tsu (timestamp update) of type DATETIME to a number of my tables.我正在将DATETIME类型的列tsu (时间戳更新)添加到我的许多表中。

I need to write BEFORE UPDATE triggers that will update the column to CURRENT_TIMESTAMP() , but I can't get it right.我需要编写BEFORE UPDATE触发器,将列更新为CURRENT_TIMESTAMP() ,但我做错了。 Tried:试过:

DELIMITER $$
CREATE
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE
    ON `cams`.`csi`
    FOR EACH ROW BEGIN
        UPDATE csi SET tsu = CURRENT_TIMESTAMP WHERE csi_code = OLD.csi_code;
    END$$
DELIMITER ;

Can anyone point me in the right direction pls?谁能指出我正确的方向吗? MTIA MTIA

Okay, try this one:好的,试试这个:

DELIMITER $$ CREATE  
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE  
    ON `cams`.`csi`  
      FOR EACH ROW BEGIN  
        SET NEW.tsu = CURRENT_TIMESTAMP;   
END$$ DELIMITER ;

If the field can be defined as a timestamp, you can use the following:如果该字段可以定义为时间戳,则可以使用以下内容:

 ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

不知道它是否适合您,但您始终可以将其设为没有默认值的TIMESTAMP字段——MySQL 会在每次更新时自动将表中定义的第一个此类字段的值设置为当前时间戳。

ts2 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP works for DATETIME and TIMESTAMP fields, for one and multiple fields ts2 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP适用于DATETIME和 TIMESTAMP 字段,适用于一个和多个字段

so you can use datecreated CURRENT_TIMESTAMP (as the default value)所以你可以使用 datecreated CURRENT_TIMESTAMP (作为默认值)

and dateupdated CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP works for DATETIME and TIMESTAMP fields (as the default value)和 dateupdated CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP适用于DATETIMETIMESTAMP字段(作为默认值)

You can use the above as SQL commands or default values in MySQL workbench您可以在 MySQL 工作台中使用以上作为 SQL 命令或默认值

There are a lot of non-working or incomprehensible examples on the network.网络上有很多不工作或难以理解的例子。 I spent several hours to put together a working example for my EFFCORE CMS.我花了几个小时为我的 EFFCORE CMS 整理了一个工作示例。 Here is this example:这是这个例子:

Trigger on UPDATE更新触发

DELIMITER ;;
CREATE TRIGGER `updated_at__on_update`
BEFORE UPDATE
ON `demo`
FOR EACH ROW
BEGIN
   SET new.updated_at = UNIX_TIMESTAMP();
END;;
DELIMITER ;

Trigger on INSERT触发 INSERT

DELIMITER ;;
CREATE TRIGGER `updated_at__on_insert`
BEFORE INSERT
ON `demo`
FOR EACH ROW
BEGIN
   SET new.updated_at = UNIX_TIMESTAMP();
END;;
DELIMITER ;

Table demodemo

CREATE TABLE `demo` (
    `id` int NOT NULL AUTO_INCREMENT,
    `text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
    `updated_at` int NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM