51

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

UPDATE table SET datetime = NOW();

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

私は MySQL を実行していますが、これはすべてのデータベースに当てはまると思います。

4

4 に答える 4

52

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

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

于 2008-10-12T07:14:12.537 に答える
9

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

update_date_time=now()

今このように更新します

UPDATE table SET datetime =update_date_time;

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

于 2016-07-04T13:51:12.490 に答える
1

更新はアトミックである必要があります。つまり、実行にどれだけ時間がかかっても、すべてが同時に行われたかのようにアクションが発生するはずです。

別の動作を経験している場合は、別の DBMS に変更する時期です。

于 2008-10-12T07:12:38.767 に答える
0

sqliteの答えは

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

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

于 2012-07-20T22:35:50.420 に答える