что действительно “удаляет из таблицы, где ПУСТОЙ УКАЗАТЕЛЬ = ПУСТОЙ УКАЗАТЕЛЬ” означает?

Что делает delete from table where NULL = NULL средний?

24
задан Sam 24 October 2014 в 18:37
поделиться

8 ответов

Это ничего не удалит из таблицы. NULL не равно NULL.

Теперь

удалить из таблицы, где NULL равно NULL

, удалит все строки из таблицы.

37
ответ дан 28 November 2019 в 22:27
поделиться

Это наказывает людей, у которых в базе данных ANSI_NULLS установлен на off :)

5
ответ дан 28 November 2019 в 22:27
поделиться

Это означает, что ничего не удаляйте, потому что NULL никогда ничему не равен. Или, может быть, это означает «не удаляйте ничего, если пользовательская СУБД действительно не отстой, и в этом случае удалите все назло».

Если серьезно, такая конструкция обычно возникает, когда предложение WHERE генерируется процедурно - вместо того, чтобы создавать специальный случай для «ничего не делать», иногда проще просто сгенерировать предложение WHERE, которое заставляет базу данных ничего не делать. . Я обычно видел «WHERE 0 = 1», что менее двусмысленно.

16
ответ дан 28 November 2019 в 22:27
поделиться

Эта команда SQL не влияет ни на одну строку.

-2
ответ дан 28 November 2019 в 22:27
поделиться

Поскольку NULL не равен NULL, это утверждение ничего не даст. Оно равно:

DELETE FROM TABLE WHERE 0
3
ответ дан 28 November 2019 в 22:27
поделиться

Я полагаю, что это зависит от базы данных, но, насколько мне известно, это не должно ничего дать, поскольку NULL никогда не равен NULL, по крайней мере, в теории db.

2
ответ дан 28 November 2019 в 22:27
поделиться

В SQL есть три логических значения, а именно ИСТИНА, ЛОЖЬ и НЕИЗВЕСТНО. когда мы сравниваем null с null, используя null = null, операция вернет UNKNOWN. Более того, в предложении WHERE все НЕИЗВЕСТНЫЕ значения отфильтровываются, поэтому запрос ничего не делает.

8
ответ дан 28 November 2019 в 22:27
поделиться

Recap:

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 - это особый зверь, как отметил Кодд

3
ответ дан 28 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: