MySQL數(shù)據(jù)庫TIMESTAMP設(shè)置默認(rèn)值的靈活運(yùn)用
MySQL數(shù)據(jù)庫TIMESTAMP設(shè)置默認(rèn)值是本文我們主要要介紹的內(nèi)容,我們知道,CURRENT_TIMESTAMP :當(dāng)我更新這條記錄的時(shí)候,這條記錄的這個(gè)字段不會(huì)改變。
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP :當(dāng)我更新這條記錄的時(shí)候,這條記錄的這個(gè)字段將會(huì)改變。即時(shí)間變?yōu)榱烁聲r(shí)候的時(shí)間。(注意一個(gè)UPDATE設(shè)置一個(gè)列為它已經(jīng)有的值,這將不引起TIMESTAMP列被更新,因?yàn)槿绻阍O(shè)置一個(gè)列為它當(dāng)前的值,MySQL為了效率而忽略更改。)
如果有多個(gè)TIMESTAMP列,只有***個(gè)自動(dòng)更新。
接下來我們看幾個(gè)實(shí)際的例子:
#1創(chuàng)建一個(gè)有兩個(gè)timestamp字段的表dj1。
- root@localhost:test >create table dj1 (a char(1), b timestamp ,c timestamp);
- Query OK, 0 rows affected (0.01 sec)
#2插入兩行數(shù)據(jù),僅賦值于列A
- root@localhost:test >insert into dj1 values (1,null,null);
- Query OK, 1 row affected (0.00 sec)
- root@localhost:test >insert into dj1 values (2,null,null);
- Query OK, 1 row affected (0.00 sec)
#3查詢插入數(shù)據(jù),b,c兩列都使用current timestamp作為默認(rèn)值。
- root@localhost:test >select * from dj1;
- +------+---------------------+---------------------+
- | a | b | c |
- +------+---------------------+---------------------+
- | 1 | 2009-09-09 13:48:40 | 2009-09-09 13:48:40 |
- | 2 | 2009-09-09 13:48:44 | 2009-09-09 13:48:44 |
- +------+---------------------+---------------------+
- 2 rows in set (0.00 sec)
#4更新一行數(shù)據(jù),發(fā)現(xiàn)b列timestamp被自動(dòng)更新,而c列保持不變。
- root@localhost:test >update dj1 set a=9 where a=1;
- Query OK, 1 row affected (0.00 sec)
- Rows matched: 1 Changed: 1 Warnings: 0
- root@localhost:test >select * from dj1;
- +------+---------------------+---------------------+
- | a | b | c |
- +------+---------------------+---------------------+
- | 9 | 2009-09-09 13:49:08 | 2009-09-09 13:48:40 |
- | 2 | 2009-09-09 13:48:44 | 2009-09-09 13:48:44 |
- +------+---------------------+---------------------+
- 2 rows in set (0.00 sec)
#5再更新一列,仍然如#4
- root@localhost:test >update dj1 set a=8 where a=2;
- Query OK, 1 row affected (0.00 sec)
- Rows matched: 1 Changed: 1 Warnings: 0
- root@localhost:test >select * from dj1;
- +------+---------------------+---------------------+
- | a | b | c |
- +------+---------------------+---------------------+
- | 9 | 2009-09-09 13:49:08 | 2009-09-09 13:48:40 |
- | 8 | 2009-09-09 13:49:36 | 2009-09-09 13:48:44 |
- +------+---------------------+---------------------+
- 2 rows in set (0.00 sec)
#6在b列上創(chuàng)建***索引
- root@localhost:test >create unique index dj1_idx_u1 on dj1(b);
- Query OK, 2 rows affected (0.01 sec)
- Records: 2 Duplicates: 0 Warnings: 0
#7更新所有行a列,報(bào)***性沖突。
- root@localhost:test >update dj1 set a=1;
- ERROR 1062 (23000): Duplicate entry '2009-09-09 13:54:45' for key 'dj1_idx_u1'
結(jié)論:
1.MySQL默認(rèn)表的***個(gè)timestamp字段為NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP屬性,必須顯式定義改變這種行為。
2.MySQL只允許一個(gè)timestamp字段擁有[DEFAULT CURRENT_TIMESTAMP |ON UPDATE CURRENT_TIMESTAMP]屬性。 我的理解為要么都是DEFAULT CURRENT_TIMESTAMP 要么都是DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
3.修改字段屬性值
- show create table tbl_ledgerrecord;
- alter table tbl_ledgerrecord change intoStorageDate intoStorageDate timestamp DEFAULT CURRENT_TIMESTAMP;
關(guān)于MySQL數(shù)據(jù)庫TIMESTAMP設(shè)置默認(rèn)值的靈活運(yùn)用的知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






