![MySQL 中没有默认值的 TIMESTAMP 类型的 NOT-NULL 列](https://linux22.com/image/1609647/MySQL%20%E4%B8%AD%E6%B2%A1%E6%9C%89%E9%BB%98%E8%AE%A4%E5%80%BC%E7%9A%84%20TIMESTAMP%20%E7%B1%BB%E5%9E%8B%E7%9A%84%20NOT-NULL%20%E5%88%97.png)
如果我创建一个表
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