我想添加一个带有unix时间戳的列,以查看该行上次更改的时间。到目前为止,我只知道如何添加带有时间戳格式的列。
ALTER TABLE xyz.test ADD `insert_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;是否有使用unix时间戳的解决方案--如下所示:
... INT ON UPDATE UNIX_TIMESTAMP() NOT NULL DEFAULT UNIX_TIMESTAMP();更新:
据我所知,这个线程只显示如何手动向每行添加unix时间戳。我想知道是否也可以自动完成这个任务。
发布于 2017-03-21 14:22:59
TIMESTAMP数据类型是唯一在MySQL中支持CURRENT_TIMESTAMP默认值的类型。在内部,时间戳作为int存储,但接口使用日期时间格式。
你有一些选择来完成你想要的事情:
UNIX_TIMESTAMP() 将其存储为时间戳,并在从中选择时应用函数。
select unix_timestamp(insert_time)
from xyz.test;将其存储为int,并使用触发器填充值。
ALTER TABLE xyz.test
ADD `insert_time_unix` INT NULL;
create trigger tr_b_ins_test before insert on xyz.test
for each row
set new.insert_time_unix = unix_timestamp(insert_time);
create trigger tr_b_upd_test before update on xyz.test
for each row
set new.insert_time_unix = unix_timestamp(insert_time);发布于 2022-09-27 13:44:32
我正在为我的CMS EFFCORE寻找一个解决方案,我找到了它。以下是一个100%的工作示例:
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`)
);
DELIMITER ;;
CREATE TRIGGER `updated_at__on_insert`
BEFORE INSERT
ON `demo`
FOR EACH ROW
BEGIN
SET new.updated_at = UNIX_TIMESTAMP();
END;;
DELIMITER ;
DELIMITER ;;
CREATE TRIGGER `updated_at__on_update`
BEFORE UPDATE
ON `demo`
FOR EACH ROW
BEGIN
SET new.updated_at = UNIX_TIMESTAMP();
END;;
DELIMITER ;附注:这里提出的其他解决方案中没有一种能准确和清晰地描述一切。
https://stackoverflow.com/questions/42929336
复制相似问题