在我的应用中,我正在使用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
,如何设置ON UPDATE
的默认值?
我知道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中的默认值必须是文字,唯一的例外是使用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()
]不同>
如果需要毫秒或微秒,则必须为datetime
和current_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)的示例