MySQL中timestamp欄位的一些規則

來源:互聯網
上載者:User

有同學說timestamp欄位的規則比較“詭異”。手冊裡面說的比較複雜,這裡簡單說明一下MySQL中 timestamp欄位的一些規則。

分為兩部分

定義規則:

1、  timestamp欄位有三個屬性:

a)           是否允許NULL。預設為not null。

b)           預設值 。可以設定為default CURRENT_TIMESTAMP 或default 某個常量。若定義時預設,對於第一個出現的timestamp欄位,預設為CURRENT_TIMESTAMP, 對於其他timestamp欄位,預設為 '0000-00-00 00:00:00'。 Default可以指定為null,前提是本欄位允許null。

比如聲明 field2 timestamp null default null。

c)           On update CURRENT_TIMESTAMP。是否在更新其他欄位時自動將該timestamp欄位修改為目前時間戳。對於第一個出現的timestamp欄位,預設為On update CURRENT_TIMESTAMP, 對於其他timestamp欄位,沒有此行為。

2、  default CURRENT_TIMESTAMP 和 On update CURRENT_TIMESTAMP 可以同時修飾一個列。被這兩個屬性任意一個修飾的列定義為timestamps_with_niladic, 一個表中最多隻能存在一個定義為timestamps_with_niladic的列。若超過1個,則建表失敗。

以上是定義規則,用於定義建表行為。建表完成以後可以用show create table xxx 來驗證上述規則。有了表定義後,我們來看timestamp的使用規則。

使用規則

1、 在insert或update語句中設定timestamp欄位為null時

a) 若該列為not null,則設定為目前時間戳

b) 若該列為允許null, 則設定為null

2、在insert時若預設,(insert 語句不指定該列的值),則等效於賦預設值。具體值由default部分決定。

3、若一個列有  On update CURRENT_TIMESTAMP 屬性,修改本行其他列時會將此timestamp列的值修改為目前時間戳。

瞭解了上面的規則,再來分析你碰到的情況,看看是不是沒那麼”詭異“了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.