如何在mysql中自动初始化timestamp列

如何在mysql中自动初始化timestamp列,mysql,Mysql,我正在使用MySQL,我制作了一个表,它有一个TIMESTAMP列,将当前时间和日期添加到添加的每一行中。但我不知道在向该表插入数据时如何初始化它。我的SQL查询是: 表格 “创建表如果不存在消息(mess\u id int主键自动递增、mess\u from int、mess\u to int、mess\u txt VARCHAR(20000)、mess\u时间戳、外键(mess\u from)引用用户(id)、外键(mess\u to)引用用户(id))” 插入 “插入用户消息(空,“+da

我正在使用MySQL,我制作了一个表,它有一个
TIMESTAMP
列,将当前时间和日期添加到添加的每一行中。但我不知道在向该表插入数据时如何初始化它。我的SQL查询是:

表格

“创建表如果不存在消息(mess\u id int主键自动递增、mess\u from int、mess\u to int、mess\u txt VARCHAR(20000)、mess\u时间戳、外键(mess\u from)引用用户(id)、外键(mess\u to)引用用户(id))”

插入

“插入用户消息(空,“+data.from+”,“+data.to+”,“+data.text+”,默认)”

问题是,我不知道如何初始化timestamp列,我尝试了
NULL
DEFAULT
但都显示了无效语法的错误。我希望时间戳字段自动初始化!就这样


在创建表时,将timestamp列上的默认值设置为CURRENT_timestamp

CREATE TABLE IF NOT EXISTS messages ( 
    mess_id int PRIMARY KEY AUTO_INCREMENT, 
    mess_from int, 
    mess_to int, 
    mess_txt VARCHAR(20000), 
    mess_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    FOREIGN KEY (mess_from) REFERENCES users(id),FOREIGN KEY (mess_to) REFERENCES users(id) )
编辑: 为完整起见,这将在插入新记录时将
mess\u time
字段设置为当前时间戳,并且不包含该字段的显式值。当该行发生更新时,它将不起作用。您可以设置它,以便在每次更新时使用“on update current_timestamp”将时间戳设置为当前时间戳

执行插入时,不要指定时间戳列:

INSERT INTO user_messages (mess_from,mess_to, mess_text) VALUES (@FromValue,@ToValue,@TextValue)
(以上操作在所有情况下都有效。有一个系统变量控制是否可以使用NULL插入当前的_时间戳。这不是标准,与其他SQL引擎不太兼容,因此通常设置为标准模式


该变量对于时间戳是显式的,但已被弃用,并且这些非标准行为将在将来的mysql版本中被删除,因此我不建议使用它。)

在创建表时,将时间戳列上的默认值设置为当前时间戳

CREATE TABLE IF NOT EXISTS messages ( 
    mess_id int PRIMARY KEY AUTO_INCREMENT, 
    mess_from int, 
    mess_to int, 
    mess_txt VARCHAR(20000), 
    mess_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    FOREIGN KEY (mess_from) REFERENCES users(id),FOREIGN KEY (mess_to) REFERENCES users(id) )
编辑: 为完整起见,这将在插入新记录时将
mess\u time
字段设置为当前时间戳,并且不包含该字段的显式值。当该行发生更新时,它将不起作用。您可以设置它,以便在每次更新时使用“on update current_timestamp”将时间戳设置为当前时间戳

执行插入时,不要指定时间戳列:

INSERT INTO user_messages (mess_from,mess_to, mess_text) VALUES (@FromValue,@ToValue,@TextValue)
(以上操作在所有情况下都有效。有一个系统变量控制是否可以使用NULL插入当前的_时间戳。这不是标准,与其他SQL引擎不太兼容,因此通常设置为标准模式

该变量对于时间戳是显式的,但已被弃用,并且这些非标准行为将在将来的mysql版本中被删除,因此我不建议使用它。)

尝试以下操作:

INSERT INTO user_messages (NULL, '"+data.from+"', '"+data.to+"', '"+data.text+"', now());
请尝试以下操作:

INSERT INTO user_messages (NULL, '"+data.from+"', '"+data.to+"', '"+data.text+"', now());

这是一个MySQL问题吗?它似乎与SQLServer无关,SQLServer是另一种产品。您也迫切需要这样做。是的,这是MySQL。如果列具有已定义的默认值,您只需将该列从insert中排除即可获得默认值。如果您希望实际的时间戳作为默认值,您也可以插入NOW()这是一个MySQL问题吗?它似乎与SQLServer无关,SQLServer是另一种产品。您也迫切需要这样做。是的,这是MySQL。如果列具有已定义的默认值,您只需将该列从insert中排除即可获得默认值。如果您希望实际时间戳作为默认值,也可以立即插入()对不起,我没有处理insert语句。已编辑。INSERT语句应排除timestamp字段。当前\u timestamp不起作用。它没有被人认出MYSQL@JasonGenX支持当前时间戳。抱歉,我没有处理INSERT语句。已编辑。INSERT语句应排除timestamp字段。当前\u timestamp不起作用。它没有被人认出MYSQL@JasonGenX支持当前时间戳。