mysql設(shè)置值timestamp獲取當(dāng)前時間并自動更新方式
需求描述:現(xiàn)需要數(shù)據(jù)庫中一個字段來記錄當(dāng)前記錄的最近修改時間或者創(chuàng)建時間,并自動更新維護。
timestamp類型的使用
示例如下:
創(chuàng)建一個數(shù)據(jù)庫,并指定 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ù)庫數(shù)據(jù)
我們看到數(shù)據(jù)插入成功,但是uptime
字段顯示為 null
。
我們再插入一條數(shù)據(jù),如下:
insert into test (tid,uptime,hobby) values(null,current_timestamp,null);
查看數(shù)據(jù)庫數(shù)據(jù)如下:
我們看到第二條數(shù)據(jù)插入成功了,并且時間為 當(dāng)前插入的時間
下面我們更新一下字段看 時間是否會自動維護
update test set hobby='籃球' where tid < 4;
我們看效果
時間并沒有自動更新,還是我們插入的時間,并不是修改的時間。
我們首先手動更新一下時間:
update test set uptime = current_timestamp where tid < 10;
效果如圖:
當(dāng)我們設(shè)置timestamp類型為current_timestamp時,系統(tǒng)會自動獲取當(dāng)前修改或者創(chuàng)建時間,但是不糊自動維護。
那么問題來了?
如何讓timestamp類型自動維護
1.我們重新傳建一個是數(shù)據(jù)庫
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)時間為current_timestamp
, on update curret_timestamp
設(shè)置可以使記錄發(fā)生改變的時候時間自動改變。
插入一條沒有默認(rèn)時間的數(shù)據(jù)數(shù)據(jù)
insert into test2 values(null,null,null);
查看表結(jié)構(gòu)
我們可以看到當(dāng)我們沒有設(shè)置默認(rèn)值的時候時間默認(rèn)為null
我們再插入一條帶默認(rèn)時間的數(shù)據(jù)
insert into test2 values(null,current_timestamp,null);
如圖:
我們可以看到 有兩條數(shù)據(jù),一條有默認(rèn)時間一條沒有。
下面我們修改一下 兩條記錄,看時間是否會自動維護
update test2 set hobby='籃球' where pid < 5;
大功告成~
我們可以看到時間字段 在 自動維護,之前默認(rèn)值為空的時候,在修改記錄之后也會自動將時間改為 修改時間。
最后的完善
我們已經(jīng)可以做到 時間自動維護了,還有一個 小缺點,
就是在剛開始插入時間時,我們沒有傳入默認(rèn)時間的話,初始值為null,只有我們修改這條記錄的時候他才會自動記錄時間。
完善方案:
在創(chuàng)建數(shù)據(jù)庫的時候設(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)如下:
這樣我們就會在創(chuàng)建該記錄時候強制傳入一個時間,并在修改的時候自動維護。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql函數(shù)group_concat()返回結(jié)果不全問題
文章介紹了MySQL中使用group_concat()函數(shù)拼接返回字段時遇到的字符長度問題,分析了問題原因,并提供了兩種解決方法:臨時修改group_concat_max_len配置和永久修改MySQL配置文件2024-11-11mysql?sum(if())和count(if())的用法說明
這篇文章主要介紹了mysql?sum(if())和count(if())的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01MYSQL多表聯(lián)查on和where的區(qū)別小結(jié)
在使用left join時過濾條件放到on后面還是where后面是有區(qū)別的,如果沒有搞清楚他們的區(qū)別,連表匯總的結(jié)果就會變少或者變多,本文就來詳細(xì)介紹一下兩者的區(qū)別,感興趣的可以了解一下2023-11-11