とはdelete from table where NULL = NULL
どういう意味ですか?
8 に答える
それはテーブルから何も削除しません。NULL は NULL と等しくありません。
今
NULL が NULL であるテーブルから削除
テーブルからすべての行を削除します。
NULL は何にも等しくならないため、何も削除しないことを意味します。あるいは、「ユーザーの DBMS が本当にひどいものでない限り、何も削除しないでください。その場合は、それにもかかわらず、すべて削除してください」という意味かもしれません。
真剣に、そのような構造は通常、WHERE 句が手続き的に生成されるときに発生します。「何もしない」という特別なケースを作成するよりも、データベースに何も行わせない WHERE 句を生成する方が簡単な場合があります。私は通常、「WHERE 0 = 1」を見てきましたが、これはそれほどあいまいではありません。
SQL には、TRUE、FALSE、および UNKNOWN という 3 つの論理値があります。null=null を使用して null と null を比較すると、操作は UNKNOWN を返します。さらに、WHERE 句では、すべての UNKNOWN 値が除外されます。したがって、クエリは何もしません。
データベースでANSI_NULLSがオフに設定されている人を罰します:)
要約:
mysql> select null = null, null <> null, null is null, null = 1, null <> 1;
+-------------+--------------+--------------+----------+-----------+
| null = null | null <> null | null is null | null = 1 | null <> 1 |
+-------------+--------------+--------------+----------+-----------+
| NULL | NULL | 1 | NULL | NULL |
+-------------+--------------+--------------+----------+-----------+
1 row in set (0.00 sec)
mysql> select count(*) from table;
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set (0.33 sec)
mysql> select * from table where null;
Empty set (0.00 sec)
つまり、条件が null と評価された場合、MySql によって false と見なされるためdelete from table where NULL = NULL
、実際には何も削除されません。
Coddが指摘するように、NULL は特別な獣です。
NULL は NULL と等しくないため、このステートメントは何もしません。次のようになります。
DELETE FROM TABLE WHERE 0
データベースに依存すると思いますが、少なくともdb理論では、NULLがNULLと等しくなることはないため、私の知る限り、何も達成しないはずです。
この SQL コマンドの影響を受ける行は 1 つもありません。