はい、いいえ:-)
どちらの場合も、アクセスはシリアル化されます (InnoDBのようなトランザクションエンジンを使用していると仮定します)同じ行にヒットするため、互いに干渉しません。言い換えれば、ステートメントは アトミック。
ただし、影響を受ける行数は、実際には接続を開いたときに設定された構成によって異なります。 mysql_affected_rows()のページ これは言うべきことです(私の太字):
そして、mysql_real_connectページ から :
つまり、で何が起こるかという点で CLIENT_FOUND_ROWS
構成されている場合、影響を受ける行は次のとおりです。
UPDATE T1 SET C1 = 'dirty' WHERE id = 1
何もない データが変更されたかどうかに関係します 一致した行のみ これは、両方のクエリで1になります。
一方、CLIENT_FOUND_ROWS
の場合 ではなかった 設定すると、2番目のクエリは実際には行を変更せず(すでに「dirty」が入力されているため)、行数はゼロになります。
同じが必要な場合 その設定に関係なく動作(変更のみを表示)、次のようなものを使用できます:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'