gpt4 book ai didi

mysql update_at 使用自 EPOCH 以来的毫秒数作为默认更新

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

在我的应用程序中,我使用 Sequelize。现在我想使用自 EPOCH 以来的毫秒数作为 update_at 列,这样它看起来像:

-------------
updated_at
-------------
1571838511364
-------------

数据定义现在如下所示:

CREATE TABLE `projects` (
`id` char(36) NOT NULL,
`name` varchar(45) NOT NULL,
`description` varchar(450) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

我已经对 created_at 执行了此操作,因为使用 Sequelize 设置默认值很容易,但是对于 updated_at,如何设置 的默认值>更新时

我知道SELECT UNIX_TIMESTAMP(current_timestamp()) 会给我当前的毫秒数,所以我有:

updatedAt: {
type: Sequelize.STRING,
allowNull: false,
defaultValue: Sequelize.literal(
'UNIX_TIMESTAMP(current_timestamp()) ON UPDATE UNIX_TIMESTAMP(current_timestamp())'
),
},

这会给我错误:

Executing:
ALTER TABLE `ab`.`projects`
CHANGE COLUMN `updated_at` `updated_at` VARCHAR(45) NOT NULL DEFAULT UNIX_TIMESTAMP(current_timestamp()) ON UPDATE UNIX_TIMESTAMP(current_timestamp()) ;

ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNIX_TIMESTAMP(current_timestamp()) ON UPDATE UNIX_TIMESTAMP(current_timestamp()' at line 2

我也尝试过默认值是:'UNIX_TIMESTAMP ON UPDATE UNIX_TIMESTAMP'但我还是遇到了同样的 sql 错误。

如何实现我的目标,以便 ON UPDATE 将使用当前的毫秒值?

最佳答案

mysql 中的默认值必须是文字,唯一的异常(exception)是使用 CURRENT_TIMESTAMP() 。

https://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html#data-types-defaults-explicit

unix_timestamp(CURRENT_TIMESTAMP())CURRENT_TIMESTAMP() 不同

如果您想要毫秒或微秒,则必​​须将精度添加到 datetimecurrent_timestamp .

你的表格将变成这样,精度为 4 位。

CREATE TABLE `projects` (
`id` char(36) NOT NULL,
`name` varchar(45) NOT NULL,
`description` varchar(450) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`created_at` datetime(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4),
`updated_at` datetime(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;

sqlfiddle 的示例 ( http://sqlfiddle.com/#!9/3a85ff/1 )

关于mysql update_at 使用自 EPOCH 以来的毫秒数作为默认更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58524700/

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