使用SQL自动更新插入DATETIME列?

时间:2016-11-15 21:12:14

标签: mysql

我目前只是将NOW()插入到我的数据库的日期字段中,该工作正常但是让我想知道,有没有办法在插入数据时自动更新DATETIME行?

我在某些地方在线发现我应该将额外内容设置为ON UPDATE CURRENT_TIMESTAMP,但在执行此操作时,我收到以下错误:

An error occurred when trying to change the field 'uploaded' via

ALTER TABLE `uploads` CHANGE `uploaded` `uploaded` DATETIME
 NOT NULL
 ON UPDATE CURRENT_TIMESTAMP
 COMMENT 'Upload Datetime'

MySQL said: Invalid ON UPDATE clause for 'uploaded' column

6 个答案:

答案 0 :(得分:3)

这就是我所做的,而且一直有效

create table if not exists my_table (
    index1 char(32) not null primary key,
    title varchar(50),
    my_timestamp timestamp not null default current_timestamp on update current_timestamp
)

这将在插入和更新时有时间戳,它也是有效的sql,也许你在查询中缺少默认语句?

答案 1 :(得分:3)

似乎问题是,在更改列时,列必须是DATETIME而不是CURRENT_TIMESTAMP,我能够成功添加{{1}}参数。

答案 2 :(得分:0)

也许这篇文档可以帮助您了解如何在sql数据库中自动更新日期时间

http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

希望这有助于你:)

答案 3 :(得分:0)

好像你的查询错了,试试这个对我有用:

ALTER TABLE `uploads` CHANGE `uploaded` `uploaded` 
DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP;

测试了它。

答案 4 :(得分:0)

在创建表时设置列的默认值,或稍后更改它。

在MySQL 5.6.5及更高版本中:

default CURRENT_TIMESTAMP

在SQL Server中:

default getdate()

在PostgreSQL中:

default now()

答案 5 :(得分:0)

对于大多数SQL方言,您可以使用默认值为DATETIME的{​​{1}}列。这处理创造。

current_timestamp

然后添加create table whatever ( ... updated datetime default current_timestamp ); 触发器。

after update

MySQL有一些特殊的语法来做到这一点。您可以在create trigger foo_updated after update on foo for each row begin update foo set updated = current_timestamp where id = new.id; end; 语句中使用create table

制作触发器
on update

然后是MySQL's timestamp date type。任何时候更新行create table whatever ( ... updated datetime default current_timestamp on update current_timestamp ); 都会将自己设置为当前日期和时间... sorta。

规则非常复杂,这就是为什么使用Timestampdatetime会更好。