2012-03-22 5 views
1

UPDATEで行を更新する場合、UPDATEステートメントに設定されているフィールドの一部がNOT field='value'を保持する場合、その行が常に影響を受けていることが常に保証されますか?MySQL同値vs.更新

これはまた、フィールド値が一定の任意の2つの連続したフィールドに対して、常に0行に影響を与えることを意味しますか?

答えて

0

はい、最初のクエリは、両方のカウントに既に

0

正しい行わとして==演算子は存在しないものの結果のみを示しないSQLクエリに変更された行のため、2番目のクエリは、(任意の行を変更していないためMySQLで - 私はあなたが分かりやすくするために使用したと仮定しています)。

影響を受ける行は、が変更された行のみをカウントします。。したがって、フィールドのいずれも変更されない場合、何も影響を受けません。この変更の比較では、クエリで実際に使用されているものとは異なり、大文字と小文字が区別されます。

編集:UPDATE文についてはhttp://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html

、デフォルトで影響を受けた、行の値が実際に変更された行の数です。 mysqldに接続するときにmysql_real_connect()にCLIENT_FOUND_ROWSフラグを指定すると、affected-rowsの値は "found"の行数になります。つまり、WHERE句でマッチします。

「実際に変更された」コンセプトをMySQLがどのように決定するかについてのリンクを探しています。言い回しに基づいて、前と後の値がバイナリレベルで等しくない場合にのみ、実際に変更されたとみなすことを意味することは明らかです。

ソースにダイビングすることなく、私はおそらくそれを証明することはできません。

+0

私はまた、いくつかの型変換に関連する問題を考えました。例えば、日の解決で与えられた日付が、同じ日の 'DATETIME'と同じであるかもしれないと思うかもしれませんが、' UPDATE'時間は0:00:00になります。 – dronus

+0

'=='を '='に編集しました。 – dronus

+0

可能なすべての変換(文字列<->数字<->回)では、私の最初のステートメントへの答えは「いいえ」であるとの悪い気持ちを持っています。 – dronus