MySQL如何在timestamp字段的值显式为null时使用当前时间?[副本]

egmofgnx  于 2023-06-28  发布在  Mysql
关注(0)|答案(1)|浏览(143)

此问题已在此处有答案

MySQL default value on NULL(3个答案)
6天前关闭
我想实现以下目标:
MySQL中表中的I字段,当提供NULL值时,应解析为当前时间。
我做了以下操作:

CREATE TABLE foo (
    bar TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    baz INT
);

-- Now let's insert something.
INSERT INTO foo (bar, baz) VALUES (null, 2);

-- Now let's make sure it works as desired.
SELECT * FROM foo;

但不幸的是,它并不像预期的那样工作:

**********
bar  | baz
**********
null | 2

只有当我在INSERT语句中省略列的值时,它才有效。
如何使上面的INSERT语句工作?也就是说,当值为空时,该字段应设置为默认时间。

yeotifhr

yeotifhr1#

你所要求的是不可能只使用SQL中的声明性功能:DEFAULT约束仅在INSERT中省略列(或使用DEFAULT作为值)时使用-否则(据我所知)替换或覆盖INSERTUPDATE中的值的唯一其他方法需要使用TRIGGER(这是非声明性的,并引入了自己的问题)。
相反,为什么不将bar设置为NOT NULL列,并确保所有INSERT语句都省略该列呢?或者更改INSERT语句以使用DEFAULT关键字?
就像这样:

INSERT INTO foo ( bar, baz )
VALUES ( DEFAULT, 123 )

相关问题