我有一个带有时间戳的 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 有办法实现这一点吗?
最佳答案
当您更新“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
关于mysql - 如何从Mysql 5.5中的时间戳字段自动更新日期字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42506777/