我想让我的MySQL数据库表与相应的elasticsearch索引保持同步。我正在尝试写自己的cron工作。 MySQL表有InnoDB引擎。我添加了updated_at
列CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
。我使用此查询执行同步:
SELECT * FROM table WHERE updated_at>=bookmark;
我对它进行了测试,发现有些插页丢失了。
在COMMIT之前计算CURRENT_TMESTAMP吗?
答案 0 :(得分:1)
CURRENT_TIMESTAMP
- NOW()
的同义词 - 在执行调用它的查询开始时捕获其值。无论查询运行多长时间,这些函数都会保持一个常量值 - 因此在长时间运行更新的情况下,所有受影响的行都将具有相同的值,并且该值应该在每个单独的查询开始执行时 - 不提交时间。
NOW()
返回一个常量时间,指示语句开始执行的时间。 (在存储的函数或触发器中,NOW()
返回函数或触发语句开始执行的时间。)这与SYSDATE()
的行为不同,后者返回执行它的确切时间。https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now