2016-10-26 3 views
0

私はMySQLデータベーステーブルを対応するelasticsearchインデックスと同期させておきたいと思います。私は自分のcronの仕事を書こうとしています。 MySQLテーブルにはInnoDBエンジンがあります。私はupdated_at列にCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPを追加しました。私はこのクエリを使用して同期を実行します:Mysql InnoDBテーブルをelasticsearchにする:トランザクション内の更新中の現在のTIMESTAMP

SELECT * FROM table WHERE updated_at>=bookmark; 

私はそれをテストし、いくつかの挿入が失われていることを発見しました。

COMMITの前にCURRENT_TMESTAMPが計算されていますか?

答えて

1

CURRENT_TIMESTAMP - NOW()の同義語 - それを呼び出すクエリの実行の開始時にその値を取得します。これらの関数は、クエリの実行時間に関係なく一定の値を保持します。したがって、実行時間の長い更新などの影響を受ける行はすべて同じ値を持ち、個々のクエリが実行を開始したとき時間。

NOW()は、ステートメントの実行が開始された時間を示す一定の時間を返します。ストアドファンクションまたはトリガ内では、NOW()は、ファンクションまたはトリガーステートメントの実行が開始された時刻を返します。これは、実行の正確な時刻を返すSYSDATE()の動作とは異なります。

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now

関連する問題