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