【发布时间】:2021-04-05 21:42:00
【问题描述】:
我对学习 SQL 和数据库创建/管理非常陌生,我遇到了一个我似乎无法找到现有答案的问题。我现在正在使用 MySQL 进行学习,并且正在运行 8.0.22 版。我正在尝试使用 date 函数从 now() 中提取结果的日期部分以用作默认值,但它给了我标题中指定的错误。
我尝试了几件事,但它们似乎没有改变任何东西。
这是我首先尝试的。
INV_DATE DATE DEFAULT date(now()) NOT NULL,
然后我试了一下:
INV_DATE DATE DEFAULT date'2016-01-01' NOT NULL,
只是看看这在语法上是否有效,并且确实有效。 当我将 DATE 数据类型更改为 DATETIME 时,NOW() 会自行工作。
我只是不太确定这个函数是怎么回事。
任何帮助将不胜感激!
编辑:这是运行它的上下文。
CREATE TABLE INVOICE (
INV_NUMBER INTEGER,
INV_DATE DATE DEFAULT now() NOT NULL,
PRIMARY KEY(INV_NUMBER),
FOREIGN KEY (CUS_CODE) REFERENCES CUSTOMER (CUS_CODE) ON UPDATE CASCADE);
我尝试使用 now() 作为默认值的原因是因为我使用的学习材料在方言之间跳转来演示事物,并且在这部分使用 Oracle SQL。它显示:
INV_DATE DATE DEFAULT SYSDATE NOT NULL,
我正在尝试将其转换为 MySQL 等价物。
【问题讨论】:
-
这不是
CREATE TABLE ..语法吗? -
@tcadidot0 是的,这是在表中定义的属性之一。
-
我熟悉
TIMESTAMP或DATETIME数据类型具有DEFAULT值NOW()或CURRENT_TIMESTAMP()在MySQL 但我不认为有一个DATE值。 Fiddle for further tests. -
@tcadidot0 对于查询,使用 DATE(NOW()) 没有问题 在某些情况下必须使用该列时,使用 DATETIME 列而不是 DATE 可能会导致查询复杂度增加复杂的情况。作为最终结果,这可能会降低性能。
-
@tcadidot0 是的,我现在明白了。正是我使用它的方式导致了这个问题。