MySQL 中没有默认值的 TIMESTAMP 类型的 NOT-NULL 列

MySQL 中没有默认值的 TIMESTAMP 类型的 NOT-NULL 列

如果我创建一个表

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

相关内容