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類(lèi)型的使用
示例如下:
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),并指定 uptime為 timestamp類(lèi)型
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類(lèi)型為current_timestamp時(shí),系統(tǒng)會(huì)自動(dòng)獲取當(dāng)前修改或者創(chuàng)建時(shí)間,但是不糊自動(dòng)維護(hù)。
那么問(wèn)題來(lái)了?
如何讓timestamp類(lèi)型自動(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í)間的話(huà),初始值為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è)參考,也希望大家多多支持腳本之家。
- 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í)間添加時(shí)間自動(dòng)更新的兩種方法
相關(guān)文章
mysql函數(shù)group_concat()返回結(jié)果不全問(wèn)題
文章介紹了MySQL中使用group_concat()函數(shù)拼接返回字段時(shí)遇到的字符長(zhǎng)度問(wèn)題,分析了問(wèn)題原因,并提供了兩種解決方法:臨時(shí)修改group_concat_max_len配置和永久修改MySQL配置文件2024-11-11mysql?sum(if())和count(if())的用法說(shuō)明
這篇文章主要介紹了mysql?sum(if())和count(if())的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01mysql字符集和數(shù)據(jù)庫(kù)引擎修改方法分享
使用虛擬主機(jī)空間上的phpmyadmin操作數(shù)據(jù)庫(kù)的時(shí)候,如果看到phpmyadmin首頁(yè)上顯示的MySQL 字符集為cp1252 West European (latin1),當(dāng)我們導(dǎo)入數(shù)據(jù)時(shí)就會(huì)出現(xiàn)亂碼2012-02-02MYSQL多表聯(lián)查on和where的區(qū)別小結(jié)
在使用left join時(shí)過(guò)濾條件放到on后面還是where后面是有區(qū)別的,如果沒(méi)有搞清楚他們的區(qū)別,連表匯總的結(jié)果就會(huì)變少或者變多,本文就來(lái)詳細(xì)介紹一下兩者的區(qū)別,感興趣的可以了解一下2023-11-11安裝Mysql時(shí)出現(xiàn)錯(cuò)誤及解決辦法
因?yàn)橐粫r(shí)手癢癢更新了一下驅(qū)動(dòng),結(jié)果導(dǎo)致無(wú)線(xiàn)網(wǎng)卡出了問(wèn)題,本文給大家分享安裝mysql時(shí)出現(xiàn)錯(cuò)誤及解決辦法,對(duì)安裝mysql時(shí)出現(xiàn)錯(cuò)誤相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12