英文:
MySQL how to use current time if value of timestamp field is explicitly null?
问题
我想要完成以下任务:
我有一个MySQL表中的字段,当提供NULL值时,应该解析为当前时间。
我按照以下步骤操作:
CREATE TABLE foo (
bar TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
baz INT
);
-- 现在让我们插入一些数据。
INSERT INTO foo (bar, baz) VALUES (null, 2);
-- 现在让我们确保它按预期工作。
SELECT * FROM foo;
但不幸的是,它并没有按预期工作:
**********
bar | baz
**********
null | 2
只有当我在INSERT
语句中省略列的值时,它才起作用。
如何使上述INSERT
语句起作用?也就是说,当值为null时,该字段应设置为默认时间。
英文:
I want to accomplish the following:
I field in a table in MySQL that, when provided with a NULL value, should resolve to the current time.
I did the following:
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;
but unfortunately it doesn't work as expected:
**********
bar | baz
**********
null | 2
It only works when I leave off the column's value in an INSERT
statement.
How can I make the above INSERT
statement work? That is, the field should be set to the default time when the value is null.
答案1
得分: 2
以下是翻译好的内容:
你所询问的在SQL中仅使用声明性功能是不可能的:DEFAULT
约束仅在从INSERT
中省略列时使用(或者使用DEFAULT
作为值) - 否则,我所知道的替换或覆盖INSERT
或UPDATE
中的值的唯一其他方法需要使用TRIGGER
(这是非声明性的,并引入了自己的问题)。
相反,为什么不将bar
列设置为NOT NULL
并确保所有INSERT
语句都省略该列?或者更改您的INSERT
语句以使用DEFAULT
关键字?
就像这样:
INSERT INTO foo ( bar, baz )
VALUES ( DEFAULT, 123 )
英文:
What you're asking isn't possible using only declarative features in SQL: a DEFAULT
constraint is only used when the column is omited from an INSERT
(or uses DEFAULT
for the value) - otherwise the only other way (that I'm aware-of) to replace or override values in an INSERT
or UPDATE
requires using a TRIGGER
(which is non-declarative and introduces problems of its own).
Instead, why not make bar
a NOT NULL
column and ensure all INSERT
statements omit that column? Or change your INSERT
statements to use the DEFAULT
keyword?
Like so:
INSERT INTO foo ( bar, baz )
VALUES ( DEFAULT, 123 )
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论