web-dev-qa-db-ja.com

UPDATE ... datetime = NOW();を実行する場合更新されたすべての行は同じ日付/時刻になりますか?

次のようなものを実行すると:

UPDATE table SET datetime = NOW();

1 000 000 000レコードを持つテーブルで、クエリの実行に10秒かかりますが、すべての行がまったく同じ時間(分と秒)になりますか、それとも異なる時間になりますか?つまり、クエリが開始されたのはいつですか、または各行が更新されたのはいつですか?

私はMySQLを実行していますが、これはすべてのデータベースに適用されると考えています。

42
Darryl Hein

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

「NOW()は、ステートメントが実行を開始した時間を示す一定の時間を返します。(ストアドルーチンまたはトリガー内で、NOW()は、ルーチンまたはトリガーを実行するステートメントが実行を開始した時間を返します。) MySQL 5.0.13の時点で実行される正確な時間を返すSYSDATE()の動作。

44
micahwittman

最終結果があなたにとって重要である場合-それを文書化された通りに「動作する」からといって、最初にテストしてください。疑わしい場合は、テストしてください!

5
andora

NOW()を変数に割り当て、変数で日時を更新します。

update_date_time=now()

今このように更新

UPDATE table SET datetime =update_date_time;

要件に従って構文を修正します

5
MRRaja

更新はアトミックである必要があります。つまり、実行にかかる時間に関係なく、すべてが同時に行われたかのようにアクションが発生することになります。

別の動作が発生している場合は、別のDBMSに変更する時が来ました。

1
gizmo

Sqliteの答えは

update TABLE set mydatetime = datetime('now');

他の誰かがそれを探していた場合に備えて。

0