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

标签 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 有办法实现这一点吗?

最佳答案

当您更新“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/

相关文章:

php - 查询增量列不起作用

mysql - 在哪里可以找到 MySQL 5.6 Windows 安装的 my.ini 配置文件

sql - postgres json数组元素和空返回

sql - 过滤 JOIN : WHERE vs. ON

sql - 使用 LIMIT 对 SQLite 进行分页

com.mysql.jdbc.ConnectionImpl.getServerCharset 处的 java.lang.NullPointerException(ConnectionImpl.java :3005)

php - 从 mysql 数据库检索服务器数据

php - 通过php5将json导入mysql5

sql - 外键引用主键包含 2 列的表

MySQL 通配符查询