Se eu criar uma tabela
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
coluna é criada como
`createDate` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
1) Qual é a lógica por trás disso? Por que o MySQL adiciona o valor padrão? E por que acrescenta ON UPDATE CURRENT_TIMESTAMP(3)
?
2) É possível criar uma coluna timestamp(3) NOT NULL
sem o valor padrão?
EDITAR1:
Tenho a impressão de que id
a coluna, por exemplo, não tem um valor padrão, porque se eu tiver
insert t1 updateDate values (now());
eu recebo
ERROR 1364 (HY000): Field 'id' doesn't have a default value
portanto, o valor padrão não é adicionado automaticamente a uma coluna do tipo INT.
Responder1
Primeiro de tudo: cada coluna possui um valor padrão. Em muitos casos, esse valor padrão é NULL
, mas se for declarado NOT NULL
, obviamente deverá ser outra coisa.
Com o TIMESTAMP
tipo de dados, o valor padrão é CURRENT_TIMESTAMP()
, mas é claro que isso pode ser substituído:
createDate TIMESTAMP(3) NOT NULL DEFAULT '0000-01-01 00:00:00'
por exemplo, definirá um valor padrão de 0,0 AD