将当前日期或时间插入MySQL

时间:2014-05-07 03:24:55

标签: mysql sql

如果我创建一个表格,其中包含一个假设为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允许插入的当前日期和时间显示?

3 个答案:

答案 0 :(得分:5)

首先 ,您的表格中应该有一个PRIMARY KEY

其次 ,您尚未为列DateTime设置默认值。另外,您无法为DATETIME类型单独设置它们 - 您应该使用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
);

原因是DEFAULTDATE单独没有MySQL TIME值。 that behavior here的一些线索:

  

数据类型规范中的DEFAULT值子句表示a   列的默认值。 有一个例外,默认值必须   是一个常数;它不能是一种功能或表达。这意味着,   例如,您不能将日期列的默认值设置为   NOW()或CURRENT_DATE等函数的值。 例外   是您可以将CURRENT_TIMESTAMP指定为的默认值    TIMESTAMP列。请参见第11.3.5节“自动初始化和   更新TIMESTAMP“。

答案 2 :(得分:2)

以下是两个选项:

  1. 删除DateTime列并添加time stamp

    INSERT INTO Register (Name,Ctime) VALUES ('Howard',CURRENT_TIMESTAMP);

  2. 如果您想继续使用表格结构

    INSERT INTO Register (Name, {日期{1}} {时间{1}}

  3. 另请注意,,) VALUES ('Howard',CURDATE(), CURTIME());是MySQL的保留字,因此应引用反引号以避免与保留字冲突。或者只是按照date格式重命名。