Если я создам таблицу
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)
?
2) Можно ли создать столбец timestamp(3) NOT NULL
без значения по умолчанию?
ПРАВКА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