1

今日、同僚に不適切に書かれた SQL 更新を書いてもらいました。

UPDATE table SET column  = 'change'
WHERE id = 2401 OR 2402 OR 2403 OR 2404 OR 2405 OR 2406;


Query OK, 264 rows affected (0.03 sec)
Rows matched: 9997 Changed: 264  Warnings: 0

なぜこれがうまくいくのでしょうか?

せいぜい1行を一意のIDで更新すると思っていました。そして 2402 と 2403....etc は何とも一致しません。

4

2 に答える 2

8

起こったことは、常に true を返す別の条件をOR 2402置いたかのように、true 値として扱われたことです。1 = 1あなたのクエリはMySQLによって次のように読み取られました

UPDATE table SET column  = 'change'
WHERE id = 2401 OR true OR true OR true OR true OR true;
于 2013-03-15T21:18:46.627 に答える
2

そのステートメントは間違っており、すべての記録を更新します。正しいクエリは次のとおりです。

UPDATE table 
SET column  = 'change'
WHERE id = 2401 OR id= 2402 OR id=2403 OR id=2404 OR id=2405 OR id=2406;

またはそれ以上:

UPDATE table 
SET column  = 'change'
WHERE id IN (2401,2402,2403,2404,2405,2406);

元のクエリは、ID が 2401 であるレコードと、2042 を保持する他の行がすべて「true」であるレコードを更新します (2042 は 0 または false ではないため)。

于 2013-03-15T21:14:26.753 に答える