如果我创建一个表
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