“从表中删除NULL = NULL”是什么意思?

时间:2010-07-08 06:35:19

标签: mysql sql null sql-delete

delete from table where NULL = NULL是什么意思?

8 个答案:

答案 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命令不会影响任何一行。