24

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

4

8 回答 8

37

这不会从表中删除任何内容。NULL 不等于 NULL。

现在

从 NULL 为 NULL 的表中删除

将从表中删除所有行。

于 2010-07-08T06:37:42.743 回答
16

这意味着不要删除任何东西,因为 NULL 永远不等于任何东西。或者它可能意味着“除非用户的 DBMS 真的很糟糕,否则不要删除任何东西,在这种情况下,出于恶意删除它”。

不过说真的,这种结构通常在程序生成 WHERE 子句时出现——而不是为“什么都不做”创建一个特殊情况,有时只生成一个导致数据库什么都不做的 WHERE 子句更简单。不过,我通常会看到“WHERE 0 = 1”,这不那么模棱两可。

于 2010-07-08T06:39:11.347 回答
8

在 SQL 中,存在三个逻辑值,即 TRUE、FALSE 和 UNKNOWN。当我们将 null 与 null 进行比较时,使用 null=null,该操作将返回 UNKNOWN。此外,在 WHERE 子句中,所有 UNKNOWN 值都被过滤掉。因此查询什么也不做。

于 2010-07-08T07:04:09.527 回答
5

它会惩罚在数据库中将 ANSI_NULLS 设置为关闭的人:)

于 2010-07-08T14:10:55.683 回答
3

由于 NULL 不等于 NULL,因此该语句将什么也不做。它等于:

DELETE FROM TABLE WHERE 0
于 2010-07-08T06:38:03.923 回答
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 认为是错误的,所以delete from table where NULL = NULL实际上不会删除任何内容。

正如Codd所说,NULL 是一种特殊的野兽

于 2010-07-08T07:24:41.987 回答
2

我想它取决于数据库,但据我所知,它不应该实现任何目标,因为 NULL 永远不等于 NULL,至少在 db 理论中是这样。

于 2010-07-08T06:37:44.863 回答
-2

此 SQL 命令不会影响任何一行。

于 2010-07-08T08:59:37.390 回答