UPDATEを実行する場合…日時= NOW();更新されたすべての行は同じ日付/時刻になりますか?
-
10-07-2019 - |
質問
次のようなものを実行する場合:
UPDATE table SET datetime = NOW();
1 000 000 000レコードがあり、クエリの実行に10秒かかるテーブルで、すべての行がまったく同じ時間(分と秒)になりますか、それとも異なる時間になりますか?つまり、クエリが開始されたのはいつですか、それとも各行が更新されたのですか?
MySQLを実行していますが、これはすべてのデータベースに適用されると考えています。
解決
http:// dev。 mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now
" NOW()は、ステートメントが実行を開始した時間を示す一定の時間を返します。 (ストアドルーチンまたはトリガー内で、NOW()はルーチンまたはトリガーステートメントが実行を開始した時刻を返します。)これは、MySQL 5.0以降の正確な実行時刻を返すSYSDATE()の動作とは異なります。 13。 "
他のヒント
最終結果があなたにとって重要である場合-最初にそれをテストします。それは文書化されたとおりに動作するはずであるからといって、それが意味するわけではありません。疑わしい場合は、テストしてください!
変数に NOW()
を割り当て、変数で日時を更新します:
update_date_time=now()
今このように更新
UPDATE table SET datetime =update_date_time;
要件に従って構文を修正します
これらは同じ時間である必要があり、更新はアトミックである必要があります。つまり、実行にかかる時間に関係なく、アクションはすべてが同時に行われたかのように発生することになります。
異なる動作を経験している場合は、別のDBMSに変更する時が来ました。
sqliteの答えは
ですupdate TABLE set mydatetime = datetime('now');
誰かがそれを探していた場合。