MySQL中timestamp字段的一些規則

有同學說timestamp字段的規則比較詭異。手冊里面說的比較復雜,這里簡單說明一下mysql中 timestamp字段的一些規則。 分為兩部分 定義規則: 1、 timestamp字段有三個屬性: a) 是否允許NULL。默認為not null。 – b) 默認值 。可以設定為default CURRENT_TIMES

有同學說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列的值修改為當前時間戳。

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

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享