首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在更新时使用UNIX_TIMESTAMP而不是时间戳

问在更新时使用UNIX_TIMESTAMP而不是时间戳
EN

Stack Overflow用户
提问于 2017-03-21 14:01:45
回答 2查看 3K关注 0票数 7

我想添加一个带有unix时间戳的列,以查看该行上次更改的时间。到目前为止,我只知道如何添加带有时间戳格式的列。

代码语言:javascript
复制
ALTER TABLE xyz.test ADD `insert_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

是否有使用unix时间戳的解决方案--如下所示:

代码语言:javascript
复制
... INT ON UPDATE UNIX_TIMESTAMP() NOT NULL DEFAULT UNIX_TIMESTAMP();

更新:

similar question

据我所知,这个线程只显示如何手动向每行添加unix时间戳。我想知道是否也可以自动完成这个任务。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-21 14:22:59

TIMESTAMP数据类型是唯一在MySQL中支持CURRENT_TIMESTAMP默认值的类型。在内部,时间戳作为int存储,但接口使用日期时间格式。

你有一些选择来完成你想要的事情:

UNIX_TIMESTAMP() 将其存储为时间戳,并在从中选择时应用函数。

代码语言:javascript
复制
select unix_timestamp(insert_time)
from xyz.test;

将其存储为int,并使用触发器填充值。

代码语言:javascript
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2022-09-27 13:44:32

我正在为我的CMS EFFCORE寻找一个解决方案,我找到了它。以下是一个100%的工作示例:

代码语言:javascript
复制
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 ;

附注:这里提出的其他解决方案中没有一种能准确和清晰地描述一切。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42929336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档