如果我创建一个表格,其中包含一个假设为DATE
的实体,并且当我Insert
并且该列留空时不应显示当前日期?与时间相同?
例如......
CREATE TABLE Register
(
Name CHAR(20) NOT NULL,
Date DATE,
Time TIME
);
然后我插入:
INSERT INTO Register (Name)
VALUES ('Howard');
我希望它显示在桌面上:
Howard | 5/6/2014 | 8:30 PM
但它会显示:
Howard | NULL | NULL
这是不正确的,如果是的话,我认为Insert
允许插入的当前日期和时间显示?
答案 0 :(得分:5)
首先 ,您的表格中应该有一个PRIMARY KEY
。
其次 ,您尚未为列Date
和Time
设置默认值。另外,您无法为DATE
和TIME
类型单独设置它们 - 您应该使用TIMESTAMP
类型和DEFAULT CURRENT_TIMESTAMP
类似:
CREATE TABLE Register (
Name CHAR(20) PRIMARY KEY NOT NULL,
Date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
第三 ,如果您想使用两列进行日期存储,可以为此表设置INSERT
事件的触发器,就像它是如下所示:
CREATE TRIGGER default_date_time
BEFORE INSERT ON my_table_name
FOR EACH ROW
BEGIN
SET NEW.Date = CURDATE();
SET NEW.Time = CURTIME();
END;
$$
答案 1 :(得分:2)
您需要设置默认值。所以你可能认为你可以做到这一点:
CREATE TABLE Register
(
Name CHAR(20) NOT NULL,
Date DATE DEFAULT CURRENT_DATE,
Time TIME DEFAULT CURRENT_TIME
);
但这不起作用。您需要使用CURRENT_TIMESTAMP
并更改数据库结构以使用组合的TIMESTAMP
格式:
CREATE TABLE Register
(
Name CHAR(20) NOT NULL,
Timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
原因是DEFAULT
或DATE
单独没有MySQL TIME
值。 that behavior here的一些线索:
数据类型规范中的DEFAULT值子句表示a 列的默认值。 有一个例外,默认值必须 是一个常数;它不能是一种功能或表达。这意味着, 例如,您不能将日期列的默认值设置为 NOW()或CURRENT_DATE等函数的值。 例外 是您可以将CURRENT_TIMESTAMP指定为的默认值 TIMESTAMP列。请参见第11.3.5节“自动初始化和 更新TIMESTAMP“。
答案 2 :(得分:2)
以下是两个选项:
删除Date
和Time
列并添加time stamp
INSERT INTO Register (Name,Ctime) VALUES ('Howard',CURRENT_TIMESTAMP);
如果您想继续使用表格结构
INSERT INTO Register (Name,
{日期{1}} {时间{1}}
另请注意,,
和) VALUES ('Howard',CURDATE(), CURTIME());
是MySQL的保留字,因此应引用反引号以避免与保留字冲突。或者只是按照date
格式重命名。