delete from table where NULL = NULL
是什么意思?
答案 0 :(得分:37)
那将从表中删除任何内容。 NULL不等于NULL。
现在
从表中删除NULL为NULL
将删除表中的所有行。
答案 1 :(得分:16)
这意味着不要删除任何东西,因为NULL永远不会等于任何东西。或者它可能意味着“除非用户的DBMS真的很糟糕,否则不要删除任何东西,在这种情况下,请尽快删除它。”
严重的是,当程序生成WHERE子句时,通常会出现这种构造 - 而不是为“什么也不做”创建一个特殊情况,有时候生成一个导致数据库什么都不做的WHERE子句更简单。我经常看到“WHERE 0 = 1”,但不那么模棱两可。
答案 2 :(得分:8)
在SQL中,有三个逻辑值,即TRUE,FALSE和UNKNOWN。当我们将null与null进行比较时,使用null = null,操作将返回UNKNOWN。此外,在WHERE子句中,所有UNKNOWN值都被过滤掉了。因此查询不执行任何操作。
答案 3 :(得分:5)
它惩罚在数据库中将ANSI_NULLS设置为off的人:)
答案 4 :(得分:3)
由于NULL不等于NULL,因此该语句不执行任何操作。它等于:
DELETE FROM TABLE WHERE 0
答案 5 :(得分:3)
回顾:
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
实际上不会删除任何内容。
NULL是Codd
所指出的特殊野兽答案 6 :(得分:2)
我想它依赖于数据库,但据我所知,它不应该实现任何东西,因为NULL永远不会等于NULL,至少在db理论中是这样。
答案 7 :(得分:-2)
此SQL命令不会影响任何一行。