Si creo una tabla
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
La columna se crea como
`createDate` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
1) ¿Cuál es la lógica detrás de esto? ¿Por qué MySQL agrega el valor predeterminado? ¿Y por qué se suma ON UPDATE CURRENT_TIMESTAMP(3)
?
2) ¿Es posible crear una columna timestamp(3) NOT NULL
sin el valor predeterminado?
EDITAR1:
Tengo la impresión de que esa id
columna, por ejemplo, no tiene un valor predeterminado, porque si lo tengo
insert t1 updateDate values (now());
yo obtengo
ERROR 1364 (HY000): Field 'id' doesn't have a default value
por lo que el valor predeterminado no se agrega automáticamente a una columna de tipo INT.
Respuesta1
Primero que nada: cada columna tiene un valor predeterminado. En muchos casos, este valor predeterminado es NULL
, pero si se declara NOT NULL
, obviamente debe ser otra cosa.
Con el TIMESTAMP
tipo de datos, el valor predeterminado es CURRENT_TIMESTAMP()
, pero, por supuesto, se puede sobrescribir:
createDate TIMESTAMP(3) NOT NULL DEFAULT '0000-01-01 00:00:00'
por ejemplo, establecerá un valor predeterminado de 0.0 AD