MySQL不允许在DATETIME字段中使用ON UPDATE CURRENT_TIMESTAMP

Mic*_*utz 15 mysql datetime timestamp

我看过很多相关的问题,但我不能指出这个具体的问题:

我有一个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)
)
Run Code Online (Sandbox Code Playgroud)

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

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

我正在使用MySQL Server 5.5.

slu*_*ion 28

DATETIME不能用于CURRENT_TIMESTAMP更新.相反,将其更改为TIMESTAMP.

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

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

  • @MichaelPlautz - 总是很高兴看到"谢谢,我用你的资源解决了它"而不是"好但我需要代码才能在触发器上执行此操作",谢谢:) (3认同)
  • 这完全奏效了,谢谢!我在表声明中删除了"ON UPDATE CURRENT TIMESTAMP",然后我在创建表后处理了这个语法:`CREATE TRIGGER'vis_update_entry'在更新'之前'对于每个行设置NEW.updated_at = CURRENT_TIMESTAMP`现在每次更新该特定行时它都会更新.故事的道德:**在线的任何地方,你可以做两个TIMESTAMPS或DATETIME与ON UPDATE是假的!**至少对于MySQL Server 5.5. (2认同)
  • 使用过的版本似乎非常重要.文档说如果使用MySQL 5.6版本它将起作用:http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html.我无法确认,因为我的服务器运行5.1 :( (2认同)
  • 对于新访问者:正如@АлександрФишер所述,它取决于您使用的MySQL版本.从5.6版本开始,您可以在DATETIME和TIMESTAMP上使用CURRENT_TIMESTAMP (2认同)

ric*_*mer 5

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

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