我有一个带有时间戳的InnoDB表,我希望有另一个字段只带有时间戳的日期部分,以便我可以在其上创建索引。 (我的时间查询将始终受日期约束,因此不需要在时间戳上设置具有高基数的索引。)
是否可以从时间戳字段自动更新日期字段ON UPDATE
(类似于CURRENT_TIMESTAMP
的工作方式)?
我尝试了以下操作,但MySQL说我的SQL语法有错误。
CREATE TABLE test_table (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`full_ts` timestamp NULL DEFAULT NULL COMMENT 'The full timestamp',
`only_date` date NULL DEFAULT NULL ON UPDATE date(full_ts) COMMENT 'This field carries only the date part of the full timestamp for better indexing.',
PRIMARY KEY (`id`),
KEY `ONLY_DATE_IDX` (`only_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我当然可以更新代码中的两个字段,但如果only_date
字段是full_ts
字段的从属字段,更新并保持数据库一致,则会更清晰。
我知道在MySQL 5.7.5中为存储的生成列添加了一个新功能,这似乎就是这样做的。不幸的是,目前无法升级数据库版本。
有没有办法在MySQL 5.5中实现这个目标?
答案 0 :(得分:0)
当您更新“full_ts”列
时,这将更新“only_date”列CREATE TRIGGER `autoDate` BEFORE UPDATE ON `test_table` FOR EACH ROW BEGIN
SET NEW.only_date=DATE(NEW.full_ts);
END
修改强> 有关触发器的进一步阅读,请参阅https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html
还值得一读有关触发器https://dev.mysql.com/doc/refman/5.5/en/faqs-triggers.html
的内容