[英]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
适用于DATETIME
和TIMESTAMP
字段(作为默认值)
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 demo
表demo
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.