如果我建立一個表
CREATE TABLE t1 (
id BIGINT UNSIGNED NOT NULL,
createDate TIMESTAMP(3) NOT NULL,
updateDate TIMESTAMP(3) NULL DEFAULT NULL,
closeDate TIMESTAMP(3) NULL DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
createDate
列創建為
`createDate` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
1)這背後的邏輯是什麼?為什麼MySQL要加入預設值?為什麼它會增加ON UPDATE CURRENT_TIMESTAMP(3)
?
timestamp(3) NOT NULL
2)是否可以建立沒有預設值的欄位?
編輯1:
例如,我的印像是id
列沒有預設值,因為如果我這樣做
insert t1 updateDate values (now());
我明白了
ERROR 1364 (HY000): Field 'id' doesn't have a default value
因此預設值不會自動加入到 INT 類型的列中。
答案1
首先:每一列都有一個預設值。在許多情況下,這個預設值是NULL
,但如果聲明NOT NULL
它顯然必須是其他值。
對於TIMESTAMP
資料類型,預設值為CURRENT_TIMESTAMP()
,但當然可以覆蓋:
createDate TIMESTAMP(3) NOT NULL DEFAULT '0000-01-01 00:00:00'
例如將設定預設值 0.0 AD