Una columna NOT-NULL de tipo TIMESTAMP sin un valor predeterminado en MySQL

Una columna NOT-NULL de tipo TIMESTAMP sin un valor predeterminado en MySQL

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;

createDateLa 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 NULLsin el valor predeterminado?

EDITAR1:

Tengo la impresión de que esa idcolumna, 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 TIMESTAMPtipo 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

información relacionada