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;
createDate
Spalte 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 NULL
ohne 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 NULL
muss er offensichtlich etwas anderes sein.
Beim TIMESTAMP
Datentyp 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