Eine NOT-NULL-Spalte vom Typ TIMESTAMP ohne Standardwert in MySQL

Eine NOT-NULL-Spalte vom Typ TIMESTAMP ohne Standardwert in MySQL

Wenn ich eine Tabelle erstelle

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;

createDateSpalte wird erstellt als

`createDate` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),

1) Welche Logik steckt dahinter? Warum fügt MySQL den Standardwert hinzu? Und warum fügt es hinzu ON UPDATE CURRENT_TIMESTAMP(3)?

2) Ist es möglich, eine Spalte timestamp(3) NOT NULLohne Standardwert zu erstellen?

BEARBEITEN1:

Ich habe den Eindruck id, dass diese Spalte beispielsweise keinen Standardwert hat, denn wenn ich

insert t1 updateDate values (now());

Ich bekomme

ERROR 1364 (HY000): Field 'id' doesn't have a default value

Daher wird der Standardwert einer Spalte vom Typ INT nicht automatisch hinzugefügt.

Antwort1

Zunächst einmal: Jede Spalte hat einen Standardwert. In vielen Fällen ist dieser Standardwert NULL, aber wenn er deklariert wird, NOT NULLmuss er offensichtlich etwas anderes sein.

Beim TIMESTAMPDatentyp ist der Standardwert CURRENT_TIMESTAMP(), dieser kann aber natürlich überschrieben werden:

createDate TIMESTAMP(3) NOT NULL DEFAULT '0000-01-01 00:00:00'

setzt beispielsweise einen Standardwert von 0,0 AD

verwandte Informationen