MySQL不允许更新DATETIME字段的当前\u时间戳

MySQL不允许更新DATETIME字段的当前\u时间戳,mysql,datetime,timestamp,Mysql,Datetime,Timestamp,我已经看到了很多相关问题,但我无法指出这个具体问题: 我有一个MySQL表,它有一个时间戳(用于字段创建的时间)和一个日期时间(用于字段每次更新)。看起来是这样的: 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

我已经看到了很多相关问题,但我无法指出这个具体问题:

我有一个MySQL表,它有一个时间戳(用于字段创建的时间)和一个日期时间(用于字段每次更新)。看起来是这样的:

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错误:1294 SQL状态:HY000)-对于“updated_at”字段的更新子句无效

我读到的所有地方(甚至在堆栈溢出上)都建议我应该能够做到这一点,但我得到了这个错误。也许还有另一种方法可以让字段在每次我更新时自动更新时间


我使用的是MySQL服务器5.5。

DATETIME
无法在更新时使用
CURRENT\u TIMESTAMP
。相反,将其更改为
时间戳

或者,考虑使用触发器来处理这种情况:


编辑:正如在评论中所说的(感谢@АаааааФааа!),自MySQL 5.6.5以来,情况已不再如此,因此另一个解决方案是在可能的情况下升级您的服务器。

是的,如果您将其更改为时间戳,既不使用
默认当前时间戳,也不使用
更新当前时间戳
,这与在更新当前时间戳时指定
默认当前时间戳
相同

MySQL不允许将函数用于默认的
日期时间
值。(请参阅MySQL数据类型。)

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


参考:

时间戳和(从MySQL 5.6.5开始)日期时间数据类型提供自动初始化和更新到当前日期和时间。有关更多信息,请参阅。

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

适用于数据类型:DATETIME或TIMESTAMP

测试环境:MySQL 5.6.27-2和MariaDB 10.1.10


在插入时存储当前日期和时间

CREATE TABLE table_demo (
    ...
    `CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP
    ...
);
将当前日期和时间存储在插入和更新上

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ... 
);
仅在更新时存储当前日期和时间

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ... 
);
注意:插入时,默认值为“0000-00-00:00:00”

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
    ...
);
看我的照片


在更新当前时间戳时设置列字段类型时间戳,属性。在我的例子中,更改数据库中的文件类型后没有问题。但并非所有情况都如此

这完全奏效了,谢谢!我在表声明中去掉了更新当前时间戳时的
,然后在创建表后处理了这个语法:
在更新每行的“vis”之前创建触发器“vis\u UPDATE\u entry”。updated\u at=CURRENT\u TIMESTAMP
,现在它在我每次更新特定行时都会更新。这个故事的寓意是:任何网上说你可以在更新时使用两个时间戳或一个日期时间戳的地方都是假的!至少对于MySQL服务器5.5而言。@MichaelPlautz-总是很高兴看到“谢谢,我用你的资源解决了它”,而不是“好,但我需要在触发器上执行此操作的代码”,谢谢:)使用的版本似乎非常重要。文档中说,如果使用MySQL版本5.6,它将起作用:。我无法确认,因为我的服务器运行5.1:(对于新访问者:正如@АаааааФааааааааааааааааааааааа请澄清:如果没有任何修改器,它将自动默认和更新?这并不能回答问题