MySQL 中沒有預設值的 TIMESTAMP 類型的 NOT-NULL 資料列

MySQL 中沒有預設值的 TIMESTAMP 類型的 NOT-NULL 資料列

如果我建立一個表

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 NULL2)是否可以建立沒有預設值的欄位?

編輯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

相關內容