如何从Mysql 5.5中的时间戳字段自动更新日期字段?

时间:2017-02-28 10:54:11

标签: mysql sql

我有一个带有时间戳的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中实现这个目标?

1 个答案:

答案 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

的内容