我目前只是将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
答案 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。
规则非常复杂,这就是为什么使用Timestamp
和datetime
会更好。