有同學說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列的值修改為當前時間戳。
了解了上面的規則,再來分析你碰到的情況,看看是不是沒那么”詭異“了