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

时间:2017-03-21 14:01:45

标签: mysql sql

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

+ ----- + ---------------- +
| Codes | PremiumByASL     |
+ ----- + ---------------- +
| 010   | 27857.9403619788 |
| 027   | 4295.89527248191 |
| 021   | 22211.0617400998 |
| 120   | 3718.53861388411 |
| 012   | 0                |
| 120   | 6952.564745595   |
| 025   | 23970.5245355982 |
| 021   | 0                |
| 021   | 63683.0552706094 |
| 021   | 139.161555555556 |
| 021   | 39.3638524365101 |
+ ----- + ---------------- +

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

+ ----- + ---------------- +
| Codes | Premium          |
+ ----- + ---------------- +
| 010   | 27,858           |
| 021   | 86,073           |
| 027   | 4,296            |
| 120   | 249,803          |
| 025   | 23,971           |
+ ----- + ---------------- +

更新

similar question

据我所知,此线程仅显示如何手动向每行添加unix时间戳。我想知道是否也可以自动执行此操作。

1 个答案:

答案 0 :(得分:1)

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);