mysql設(shè)置值timestamp獲取當(dāng)前時(shí)間并自動(dòng)更新方式
需求描述:現(xiàn)需要數(shù)據(jù)庫(kù)中一個(gè)字段來(lái)記錄當(dāng)前記錄的最近修改時(shí)間或者創(chuàng)建時(shí)間,并自動(dòng)更新維護(hù)。
timestamp類型的使用
示例如下:
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),并指定 uptime為 timestamp類型
create table test( tid int primary key auto_increment, uptime timestamp, hobby varchar(20) );
插入一條數(shù)據(jù)
insert into test (tid,uptime,hobby) values(null,null,null);
查看數(shù)據(jù)庫(kù)數(shù)據(jù)

我們看到數(shù)據(jù)插入成功,但是uptime字段顯示為 null。
我們?cè)俨迦胍粭l數(shù)據(jù),如下:
insert into test (tid,uptime,hobby) values(null,current_timestamp,null);
查看數(shù)據(jù)庫(kù)數(shù)據(jù)如下:

我們看到第二條數(shù)據(jù)插入成功了,并且時(shí)間為 當(dāng)前插入的時(shí)間
下面我們更新一下字段看 時(shí)間是否會(huì)自動(dòng)維護(hù)
update test set hobby='籃球' where tid < 4;
我們看效果

時(shí)間并沒(méi)有自動(dòng)更新,還是我們插入的時(shí)間,并不是修改的時(shí)間。
我們首先手動(dòng)更新一下時(shí)間:
update test set uptime = current_timestamp where tid < 10;
效果如圖:

當(dāng)我們?cè)O(shè)置timestamp類型為current_timestamp時(shí),系統(tǒng)會(huì)自動(dòng)獲取當(dāng)前修改或者創(chuàng)建時(shí)間,但是不糊自動(dòng)維護(hù)。
那么問(wèn)題來(lái)了?
如何讓timestamp類型自動(dòng)維護(hù)
1.我們重新傳建一個(gè)是數(shù)據(jù)庫(kù)
create table test2( pid int primary key auto_increment, uptime timestamp null default current_timestamp on update current_timestamp, hobby varchar(30) );
2.我們先看一下創(chuàng)建后的表結(jié)構(gòu):
show create table test2;

我們注意一下 uptime 字段,可以為空,默認(rèn)時(shí)間為current_timestamp, on update curret_timestamp設(shè)置可以使記錄發(fā)生改變的時(shí)候時(shí)間自動(dòng)改變。
插入一條沒(méi)有默認(rèn)時(shí)間的數(shù)據(jù)數(shù)據(jù)
insert into test2 values(null,null,null);
查看表結(jié)構(gòu)

我們可以看到當(dāng)我們沒(méi)有設(shè)置默認(rèn)值的時(shí)候時(shí)間默認(rèn)為null
我們?cè)俨迦胍粭l帶默認(rèn)時(shí)間的數(shù)據(jù)
insert into test2 values(null,current_timestamp,null);
如圖:

我們可以看到 有兩條數(shù)據(jù),一條有默認(rèn)時(shí)間一條沒(méi)有。
下面我們修改一下 兩條記錄,看時(shí)間是否會(huì)自動(dòng)維護(hù)
update test2 set hobby='籃球' where pid < 5;
大功告成~

我們可以看到時(shí)間字段 在 自動(dòng)維護(hù),之前默認(rèn)值為空的時(shí)候,在修改記錄之后也會(huì)自動(dòng)將時(shí)間改為 修改時(shí)間。
最后的完善
我們已經(jīng)可以做到 時(shí)間自動(dòng)維護(hù)了,還有一個(gè) 小缺點(diǎn),
就是在剛開(kāi)始插入時(shí)間時(shí),我們沒(méi)有傳入默認(rèn)時(shí)間的話,初始值為null,只有我們修改這條記錄的時(shí)候他才會(huì)自動(dòng)記錄時(shí)間。
完善方案:
在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)置 uptime字段為 not null
create table test3(pid int primary key auto_increment,uptime timestamp not null default current_timestamp on update current_timestamp);
表結(jié)構(gòu)如下:

這樣我們就會(huì)在創(chuàng)建該記錄時(shí)候強(qiáng)制傳入一個(gè)時(shí)間,并在修改的時(shí)候自動(dòng)維護(hù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- java實(shí)現(xiàn)mysql自動(dòng)更新創(chuàng)建時(shí)間與更新時(shí)間的兩種方式
- MySQL修改時(shí)間添加時(shí)間自動(dòng)更新的兩種方法
- MySQL中create_time和update_time實(shí)現(xiàn)自動(dòng)更新時(shí)間
- MySQL8設(shè)置自動(dòng)創(chuàng)建時(shí)間和自動(dòng)更新時(shí)間的實(shí)現(xiàn)方法
- MySQL中創(chuàng)建時(shí)間和更新時(shí)間的自動(dòng)更新的實(shí)現(xiàn)示例
- mysql 實(shí)現(xiàn)添加時(shí)間自動(dòng)添加更新時(shí)間自動(dòng)更新操作
- MySQL timestamp自動(dòng)更新時(shí)間分享
- mysql設(shè)置update時(shí)間字段自動(dòng)更新的實(shí)現(xiàn)
相關(guān)文章
MySQL INNER JOIN 的底層實(shí)現(xiàn)原理分析
這篇文章主要介紹了MySQL INNER JOIN 的底層實(shí)現(xiàn)原理,INNER JOIN的工作分為篩選和連接兩個(gè)步驟,連接時(shí)可以使用多種算法,通過(guò)本文,我們深入了解了MySQL中INNER JOIN的底層實(shí)現(xiàn)原理,需要的朋友可以參考下2023-06-06
在linux服務(wù)器上配置mysql并開(kāi)放3306端口的操作步驟
這篇文章主要介紹了在linux服務(wù)器上配置mysql并開(kāi)放3306端口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Mysql保持現(xiàn)有內(nèi)容在后面增加內(nèi)容的sql語(yǔ)句
這篇文章主要介紹了Mysql保持現(xiàn)有內(nèi)容在后面增加內(nèi)容的sql語(yǔ)句,需要的朋友可以參考下2017-05-05
mysql忘記root密碼的解決辦法(針對(duì)不同mysql版本)
這篇文章主要介紹了mysql忘記root密碼的解決辦法(針對(duì)不同mysql版本),文章通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06
MySQL的主從復(fù)制步驟詳解及常見(jiàn)錯(cuò)誤解決方法
這篇文章主要介紹了MySQL的主從復(fù)制步驟詳解及常見(jiàn)錯(cuò)誤解決方法,文中主張同步時(shí)跳過(guò)臨時(shí)錯(cuò)誤,并對(duì)Slave_IO_Running: No錯(cuò)誤的解決給出了方案,需要的朋友可以參考下2016-02-02

