19

我已经看到了很多相关的问题,但我无法将手指放在这个特定的问题上:

我有一个 MySQL 表,其中包含一个 TIMESTAMP(用于创建字段的时间)和一个 DATETIME(用于每次更新该字段的时间)。它看起来像这样:

CREATE TABLE 'vis' (
ID BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
ENTRY VARCHAR(255),
AUTHOR VARCHAR(255),
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UPDATED_AT DATETIME ON UPDATE CURRENT_TIMESTAMP,
UPDATED_BY VARCHAR(255)
)

当我尝试这个时,我得到的错误是:(SQL Error: 1294 SQL State: HY000) - Invalid ON UPDATE clause for 'updated_at' field

我读过的所有地方(甚至在 Stack Overflow 上)都表明我应该能够做到这一点,但我收到了这个错误。也许还有另一种方法可以让一个字段在我每次更新时自动更新时间?

我正在使用 MySQL 服务器 5.5。

4

7 回答 7

32

DATETIME不能CURRENT_TIMESTAMP在更新时使用。相反,将其更改为TIMESTAMP.

或者,考虑在这种情况下使用触发器:http: //dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html

编辑:如评论中所述(感谢@АлександрФишер!),自 MySQL 5.6.5 以来不再是这种情况,因此另一种解决方案是尽可能升级您的服务器。

于 2012-10-14T13:38:58.477 回答
5

该功能似乎已在 5.6 中引入。在我的默认 OS X 安装上按预期工作。

参考:MySQL 5.6.5 之前的自动时间戳属性

于 2013-07-25T03:51:58.487 回答
2

MySQL不允许函数用于默认DateTime值。(请参阅 MySQL 数据类型默认值。)

于 2012-10-14T13:40:33.247 回答
1

自动插入和更新日期/时间

适用于数据类型:DATETIME 或 TIMESTAMP

测试:MySQL 5.6.27-2 和 MariaDB 10.1.10


在INSERT上存储当前日期和时间

CREATE TABLE table_demo (
    ...
    `CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP
    ...
);

在INSERTUPDATE上存储当前日期和时间

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ... 
);

仅在UPDATE上存储当前日期和时间

注意:插入时,默认值为 '0000-00-00 00:00:00'

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
    ...
);
于 2016-05-30T11:31:09.697 回答
0

是的,如果您将其更改为 timestamp ,不带DEFAULT CURRENT_TIMESTAMPnor ON UPDATE CURRENT_TIMESTAMP,则与同时指定DEFAULT CURRENT_TIMESTAMPand相同ON UPDATE CURRENT_TIMESTAMP

于 2012-10-14T13:39:43.653 回答
0
于 2015-11-20T01:51:00.400 回答
0
于 2016-07-11T09:10:23.637 回答