MySQL中CURRENT_TIMESTAMP時間戳的使用詳解
前言
最近在項目中發(fā)現(xiàn)一個小問題,數(shù)據(jù)被更改時,插入記錄和更新記錄的時間會被同步更新。設置的兩個時間create_time、update_time,按照預期來講,應該是創(chuàng)建記錄的時候會同步更新create_time,update_time,而在更新記錄的時候,只有update_time會被同步更新。但實際情況卻是update記錄時,兩個time都會被同步更新。
在代碼中并沒有對時間進行顯性的設置,對時間的維護是MySQL本身進行管理的,所以就查看了一下之前同事創(chuàng)建表時的SQL。

通過SQL語句可以看出,create_time 和 update_time 設置的都是 DEFAULT CURRENT_TIMESTAMP,不管是新創(chuàng)建的記錄,還是更新原有的記錄,只要是有觸發(fā)的操作,這兩個時間就會被同步修改。所以要達到預期的效果,就需要修改這里了。問題根源就是SQL語句這里的設置。
解決:
把update_time的 DEFAULT CURRENT_TIMESTAMP后面再加上條件限制 ON UPDATE CURRENT_TIMESTAMP。這樣在更新記錄時,只有更新時間被修改,創(chuàng)建時間就是最初創(chuàng)建記錄的時間。
MySQL中的CURRENT_TIMESTAMP:
在創(chuàng)建時間字段的時候-----
① DEFAULT CURRENT_TIMESTAMP
表示當插入數(shù)據(jù)的時候,該字段默認值為當前時間
② ON UPDATE CURRENT_TIMESTAMP
表示每次更新這條數(shù)據(jù)的時候,該字段都會更新成當前時間
這兩個操作是mysql數(shù)據(jù)庫本身在維護,所以可以根據(jù)這個特性來生成【創(chuàng)建時間】和【更新時間】兩個字段,且不需要代碼來維護。
如下:
CREATE TABLE `mytest` (
`id` bigint NOT NULL AUTO_INCREMENT,
`comments` varchar(255) DEFAULT '' COMMENT '內(nèi)容',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
//如果想設置一個具體的默認時間可以這樣:
CREATE TABLE `mytest2` (
`id` bigint NOT NULL AUTO_INCREMENT,
`comments` varchar(255) DEFAULT '' COMMENT '內(nèi)容',
`create_time` timestamp DEFAULT '2020-12-12 12:12:12' COMMENT '創(chuàng)建時間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
補充:mysql自帶的一些函數(shù)功能也是很強大的,這里整理了一下時間方面的
獲取當前時間格式串:
#獲取當前時間戳 current_timestamp() yyyy-mm-dd hh:ii:ss now() yyyy-mm-dd hh:ii:ss curdate() yyyy-mm-dd current_date() curtime() hh:ii:ss current_time()
提取date各個字段
#提取date各個字段
date('yyyy-mm-dd hh:ii:ss') yyyy-mm-dd
year('yyyy-mm-dd hh:ii:ss') yyyy
month('yyyy-mm-dd hh:ii:ss') mm
day('yyyy-mm-dd hh:ii:ss') dd
提取time各個字段
#提取time各個字段
time('yyyy-mm-dd hh:ii:ss') hh:ii:ss
hour('yyyy-mm-dd hh:ii:ss') hh
minute('yyyy-mm-dd hh:ii:ss') ii
second('yyyy-mm-dd hh:ii:ss') ss
獲取當前或者某一時間的unix時間戳
#unix時間戳1970-01-01以來的秒數(shù)
unix_timestamp()
#同時還可以將某一時間格式串的秒數(shù)轉(zhuǎn)化出來
unix_timestamp('yyyy-mm-dd hh:ii:ss')
格式化時間串和格式化時間戳
#格式化時間串 date_format 與 time_format 為同一函數(shù) 輸入為 date_format(now(), '%Y-%m-%d %T'); time_format(now(), '%H:%i:%s'); #格式化時間戳 將時間戳轉(zhuǎn)化為時間格式串 from_unixtime(unix_timestamp(), "%Y-%m-%d %T")
總結
到此這篇關于MySQL中CURRENT_TIMESTAMP時間戳使用的文章就介紹到這了,更多相關MySQL CURRENT_TIMESTAMP時間戳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在Ubuntu或Debian系統(tǒng)的服務器上卸載MySQL的方法
這篇文章主要介紹了在Ubuntu或Debian系統(tǒng)的服務器上卸載MySQL的方法,適用于Debian系的Linux系統(tǒng),需要的朋友可以參考下2015-06-06
MySQL數(shù)據(jù)庫之數(shù)據(jù)表操作DDL數(shù)據(jù)定義語言
這篇文章主要介紹了MySQL數(shù)據(jù)庫之數(shù)據(jù)表操作DDL數(shù)據(jù)定義語言,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
MYSQL數(shù)據(jù)庫查詢按日期分組統(tǒng)計詳細代碼
這篇文章主要給大家介紹了關于MYSQL數(shù)據(jù)庫查詢按日期分組統(tǒng)計的相關資料,按日期分組是指按照時間維度對數(shù)據(jù)進行分類匯總統(tǒng)計,常用于查詢分析具有時間屬性的數(shù)據(jù),例如訂單量、用戶活躍等,需要的朋友可以參考下2024-01-01

