MySQL之timestamp

541732025發表於2015-06-05
在mysql中,timestamp是經常用到的型別,大小是4個位元組,取值範圍是1970-2038。如果一個表中有多列timestamp欄位,在使用的時候需要注意一些細節。

點選(此處)摺疊或開啟

  1. CREATE TABLE `test2` (
  2.   id INT(11) NOT NULL,
  3.   t1 TIMESTAMP,
  4.   t2 TIMESTAMP,
  5.   PRIMARY KEY (id)
  6. ) ENGINE=INNODB DEFAULT CHARSET=utf8
建立一個表,兩個timestamp欄位,t1、t2什麼約束都不寫,那麼建表以後,檢視錶的DDL資訊會是這樣:

點選(此處)摺疊或開啟

  1. CREATE TABLE `test2` (
  2.   id int(11) NOT NULL,
  3.   t1 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  4.   t2 timestamp NOT NULL DEFAULT \'0000-00-00 00:00:00\',
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
可以看到,什麼都不寫,第一個timestamp欄位預設就是DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;而第二個timestamp欄位預設是0。
如果t1、t2我都手動指定DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP呢?效果會怎樣?
結果,MySQL會報錯,建立失敗!

點選(此處)摺疊或開啟

  1. CREATE TABLE `test2` (
  2.   `id` INT(11) NOT NULL,
  3.   `t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  4.   `t2` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=INNODB DEFAULT CHARSET=utf8


  7. 1 queries executed, 0 success, 1 errors, 0 warnings
  8. 查詢:CREATE TABLE `test2` ( `id` int(11) NOT NULL, `t1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `t2...
  9. 錯誤程式碼: 1293
  10. Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
  11. 執行耗時 : 0 sec
  12. 傳送時間 : 0 sec
  13. 總耗時 : 0.004 sec
錯誤提示:只允許一個timestamp欄位(預設第一個)能夠利用CURRENT_TIMESTAMP,不管是default,還是on update。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1688276/,如需轉載,請註明出處,否則將追究法律責任。

相關文章