2017-03-21 25 views
3

我想添加一個帶有unix時間戳的列來查看最後一次修改行的時間。到目前爲止,我只能想出如何添加具有時間戳格式的列。更新時使用UNIX_TIMESTAMP而不是時間戳

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

UPDATE:

similar question

據我瞭解這個線程只能說明如何手動爲每行添加一個unix時間戳。我想知道是否也可以自動執行此操作。

+0

AFAIK mysql timestamp is已經與unix時間戳相同的東西 –

+0

可能重複[mysql查詢 - 插入數據unix \ _timestamp(now())問題](http://stackoverflow.com/questions/11558418/mysql-query-insert-data-unix- timestamp-now-issue) –

+0

@LelioFaieta你能否向我解釋一下你的意思是「和unix時間戳已經是一樣的東西」 - 也許我在這裏失去了一些基本的東西? – RandomDude

回答

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