MySQL5.6版本之后設置DATETIME類型自動更新


在使用MySQL中datetime格式自動更新特性時,我們應該明確一點,datetime格式設置默認值為當前時間和自動更新時間是從MySQL5.6版本之后開始支持的。此前我們都是使用timestamp格式來實現自動更新時間。

一、下面是datetime與timestamp兩者的簡單對比

格式 時間范圍 時間處理 默認值和自動更新
datetime '1000-01-01 00:00:00'~'9999-12-31 23:59:59' - 高版本支持
timestamp '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC 從當前時區轉換為UTC存儲,並從UTC轉回當前時區以供檢索 支持

二、總結一下區別,主要是: 

  • datetime的默認值為null,timestamp的默認值不為null,且為系統當前時間(current_timestatmp)。如果不做特殊處理,且update沒有指定該列更新,則默認更新為當前時間。
  • datetime占用8個字節,timestamp占用4個字節。timestamp利用率更高。
  • 二者存儲方式不一樣,對於timestamp,在存儲時從當前時區轉換為UTC存儲,檢索時從UTC轉回當前時區以供檢索。但對於datetime,基本上存什么是什么。
  • 二者范圍不一樣。timestamp范圍:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’;datetime范圍:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。原因是,timestamp占用4字節,能表示最大的時間毫秒為2的31次方減1,也就是2147483647,換成時間剛好是2038-01-19 03:14:07.999999。

三、設置默認值和自動更新策略的方式:

DEFAULT關鍵字設置默認值;

ON UPDATE 關鍵字設置更新策略;兩者互相獨立。

-- 創建測試表
CREATE TABLE mytest (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`username` varchar(50) DEFAULT NULL,
	`password` varchar(50) DEFAULT NULL,
  createTime DATETIME DEFAULT CURRENT_TIMESTAMP ,
  updateTime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	PRIMARY KEY (`id`)
);

如果是更新已有字段使用如下語句

 alter table tableName modify column createTime DATETIME DEFAULT CURRENT_TIMESTAMP;
 alter table tableName modify column updateTime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

測試

-- 檢測默認值,插入測試數據
-- 可以看到插入數據自動給createTime設置的默認時間的當前時間,updateTime為最后一次更新的時間
INSERT into mytest(`username`,`password`) VALUES ("root","root");

-- 檢測自動更新,更新某條數據
-- 當修改數據時,updateTime自動更新為當前時間
update mytest set username = "admin" where id = 1;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM