我正在使用 MySQL,我制作了一个表,其中有一个 TIMESTAMP
列,它将当前时间和日期添加到添加的每一行。但我不知道当我向该表插入数据时如何初始化它。我的 SQL 查询是:
表格
“如果不存在则创建表消息(mess_id int PRIMARY KEY AUTO_INCRMENT、mess_from int、mess_to int、mess_txt VARCHAR(20000)、mess_time TIMESTAMP、FOREIGN KEY (mess_from) REFERENCES users(id)、FOREIGN KEY (mess_to) ) 引用用户(id) )"
插入
“INSERT INTO user_messages (NULL,'"+data.from+"','"+data.to+"','"+data.text+"',默认)"
The problem is, I don't know how to initialize the timestamp column, I tried
NULL
andDEFAULT
but both show me this error of invalid syntax. I want the timestamp field to be initialized automatically! That's it.
最佳答案
在创建表时,将时间戳列的默认值设置为 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_time
字段设置为当前时间戳。当该行发生更新时,它不会产生任何影响。您可以设置它,以便在每次更新时使用“ON UPDATE 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 ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (mess_from) REFERENCES users(id),FOREIGN KEY (mess_to) REFERENCES users(id) )
执行 INSERT 时,不要指定时间戳列:
INSERT INTO user_messages (mess_from,mess_to, mess_text) VALUES (@FromValue,@ToValue,@TextValue)
(上面的方法在所有情况下都有效。有一个系统变量控制是否可以使用 NULL 插入 current_timestamp。这不是标准的,与其他 SQL 引擎的兼容性较差,因此通常设置为标准模式。
该变量是explicit_defaults_for_timestamp,但它已被弃用,并且这些非标准行为将在未来的mysql版本中删除,因此我不建议使用它。)
关于mysql - 如何自动初始化mysql中的时间戳列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46960377/