В моем приложении я использую Sequelize. Теперь я хочу использовать миллисекунды с EPOCH для столбца updated_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
использовал текущее значение в миллисекундах?