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に設定する

関連情報