使用 MySQL,我尝试从日期列和时间列创建时间戳列。如果日期或时间列包含 NULL 值,MySQL 会自动将
TIMESTAMP
列中的相应值设置为 CURRENT_TIMESTAMP
。
有没有办法让它默认为
NULL
,而不是CURRENT_TIMESTAMP
?
类似:
ALTER TABLE customers ADD s_timestamp TIMESTAMP;
UPDATE customers
SET s_timestamp = timestamp(s_date,s_time) DEFAULT NULL;
使用此查询添加您的列
ALTER TABLE `customers`
ADD COLUMN `s_timestamp` TIMESTAMP NULL DEFAULT NULL;
并且,如果您只想在更新时获取当前时间戳:
ALTER TABLE `customers`
ADD COLUMN `s_timestamp` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP;
添加到接受的答案,以防有人想要修改默认创建为 current_timestamp 的现有列:
alter table `customers` modify `s_timestamp` timestamp null
该列现在不再默认为 current_timestamp。
虽然这似乎已经得到解答,但我们有
createdAt
和 updatedAt
TIMESTAMP(6)
列。
`createdAt` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updatedAt` timestamp(6) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(6),
在我们的应用程序代码中,我们从不设置这些值(除非修复某些内容并希望保留任何原始
updatedAt
或克隆/导入数据并且这些值是已知的)。
如果您在构建时间戳时的日期/时间为空,那么首先测试它们是一个可行的选择。
未经测试
UPDATE table SET column = CASE
WHEN s_date IS NULL OR s_time IS NULL THEN null
ELSE TIMESTAMP(s_date, s_time)
END
根据记忆,如果查询中未提及该列,则会发生默认行为。
我认为这应该可行:
ALTER TABLE customers ADD COLUMN s_timestamp TIMESTAMP DEFAULT NULL;