gpt4 book ai didi

mysql - 我可以使用 DEFAULT 在 MySQL 的 UPDATE 命令中设置时间戳吗?

转载 作者:行者123 更新时间:2023-11-29 15:55:55 25 4
gpt4 key购买 nike

我的托管提供商昨天更新了我们的 MySQL,现在我网站的重要部分无法运行。经过调查,我发现任何指定时间戳应设置为 DEFAULT 的 UPDATE 命令都无法更新时间戳。这是一个已经完美运行2年的网站。新的 MySQL 版本是 10.2.23-MariaDB-log-cll-lve。

例如,使用下表并填充一些数据:

CREATE TABLE `NewTable` ( `NewTableKEY` INT NOT NULL AUTO_INCREMENT , `NewTableTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`NewTableKEY`));

INSERT INTO `NewTable` (`NewTableKEY`, `NewTableTime`) VALUES (NULL, DEFAULT);

我尝试使用 DEFAULT 更新时间戳:

UPDATE NewTable SET NewTableTime=DEFAULT;

在 phpMyAdmin 中,我得到的响应是:

 0 rows affected. (Query took 0.0005 seconds.)

我也尝试过使用 NULL 而不是默认值:

UPDATE NewTable SET NewTableTime=NULL;

以这种方式使用 NULL 确实会将 Timestamp 字段更新为当前时间。我发现在 INSERT 命令中使用 DEFAULT 效果很好。我还发现“更新 CURRENT_TIMESTAMP”功能按预期工作。

据我所知,在 UPDATE 命令中使用 DEFAULT 是正确的语法(并且它已经工作了很多年)。我使用了错误的语法吗?此语法已被弃用吗?如果是这样,正确的语法是什么?

最佳答案

将表定义更改为以下内容

CREATE TABLE `NewTable` ( `NewTableKEY` INT NOT NULL AUTO_INCREMENT , 
`NewTableTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`NewTableKEY`));

这将自动更新执行UPDATE查询时的时间戳。 DEFAULT仅迎合insert语句,但如果指定ON UPDATE,MySQL会自动更新字段值(无需编码)

引用[ https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html ] 更多细节。

希望这有帮助

如果您想根据您的条件进行更新,请编写自己的代码或使用触发器,类似于下面的内容,

CREATE TRIGGER _triggerName AFTER UPDATE ON _tableName FOR EACH ROW 
BEGIN
-- Your conditions
-- Your queries Based on the conditions
END;

关于mysql - 我可以使用 DEFAULT 在 MySQL 的 UPDATE 命令中设置时间戳吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56461273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com