Предложение SQL WHERE для любого значения?

Я выполняю SQL для базы данных MySQL и пытаюсь написать команды для удаления всех строк в таблице. Когда я запускаю «УДАЛИТЬ ИЗ MyTable», я получаю сообщение об ошибке 1175, потому что по умолчанию включена функция безопасности, которая заставляет вас указывать предложение WHERE в первичном ключе.

Я мог бы отключить эту функцию, но она мне нравится, поэтому я пытаюсь изменить свою команду, чтобы получить тот же эффект, добавив предложение WHERE. Итак, это работает:

DELETE FROM MyTable WHERE MyID > 0

При удалении всех строк больше, где MyID больше нуля, но я ищу действительно универсальный, который будет работать для любых значений MyID. я пробовал эти

DELETE FROM MyTable WHERE MyID = ANY

DELETE FROM MyTable WHERE MyID = *

Но это синтаксические ошибки. Документ в предложении WHERE говорит, что он просто принимает =, <,>,> =, <=, <>, BETWEEN, LIKE и IN, но ничего похожего на то, что он принимает что-либо.

Есть ли правильный синтаксис для условного выражения WHERE, которое принимает любое значение?

Спасибо.

Where MyId = MyId ?
Stu 20.01.2023 17:29

@Стью, or MyID is NULL

jarlh 20.01.2023 17:30

Или, Where 1=1

topsail 20.01.2023 17:31

или просто where 1=1

eshirvana 20.01.2023 17:31
MyId не может быть NULL, если это первичный ключ
Stu 20.01.2023 17:31

@jarlh - Почему это всегда должно быть правдой?

PM 77-1 20.01.2023 17:32

Почему бы не обрезать?

P.Salmon 20.01.2023 17:33

@stu, верно. (Кажется, я недостаточно внимательно прочитал вопрос...) Тогда 1 = 1 тоже не работает.

jarlh 20.01.2023 17:33

Вроде не похоже MyID=MyID, все равно вылетает ошибка 1175

Chris 20.01.2023 17:36

@PM77-1, добавь в Where MyId = MyId. (Я не знал, что MyID не равен нулю.)

jarlh 20.01.2023 17:39

Я ищу по-настоящему универсальный, который будет работать для любых значений MyID, так как же > 0 не работает для любых значений, могут ли значения быть отрицательными?

Stu 20.01.2023 17:41

@stu, нет, но я предполагаю, что они могут быть fred, bill, ..... просто интересно здесь вслух

RiggsFolly 20.01.2023 17:45

@Stu, я пишу что-то вроде промежуточного программного обеспечения, так что да, пользователь моего кода может решить использовать отрицательные значения для первичного ключа.

Chris 20.01.2023 17:45

@Chris, предполагая, что PK всегда является целочисленным / числовым типом, тогда >= -2147483647 также будет работать

Stu 20.01.2023 17:54
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
14
80
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Сделайте это составным условием.

WHERE id IS NULL OR id IS NOT NULL;

Опять же, может быть, условие безопасности существует по важной причине, которую вы не должны обходить стороной.

Поскольку MyID является первичным ключом, NOT NULL будет достаточно.

PM 77-1 20.01.2023 17:34

Странно, MyID = 100 работает, но MyID IS NOT NULL все равно выдает ошибку 1175.

Chris 20.01.2023 17:38

IS NULL не срабатывает 1175, но IS NOT NULL срабатывает 1175. Довольно раздражает, так как я делаю намерение явным.

Chris 20.01.2023 17:40
Ответ принят как подходящий

Использовать

 TRUNCATE MyTable;

тогда вам не нужны никакие условия, так как у вас должны быть привилегии DELETE

TRUNCATE TABLE очищает таблицу. Для этого требуется привилегия DROP. Логически TRUNCATE TABLE похож на оператор DELETE, который удаляет все строки, или на последовательность операторов DROP TABLE и CREATE TABLE.

см. руководство

Ошибка связана с параметром клиента sql_safe_updates (см. https://dev.mysql.com/doc/refman/8.0/en/mysql-tips.html#safe-updates).

Один из способов обойти режим безопасных обновлений — использовать в запросе предложение LIMIT. Вы можете использовать любое значение, даже значение, намного превышающее количество строк в вашей таблице.

DELETE FROM MyTable LIMIT 9223372036854775807;

Вы также можете отключить безопасный режим обновлений, а затем запустить DELETE в обычном режиме:

SET sql_safe_updates=0;
DELETE FROM MyTable; -- returns no error

TRUNCATE TABLE — лучшее решение, если вы хотите удалить все строки.

Другие вопросы по теме