Записи SQL Delete в пределах определенного диапазона

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

Например, мне нужно удалить строки с идентификатором между 79 и 296:

Мое беспокойство заключается в том, что я могу удалить все с идентификатором ( > 79 И < 296), после чего он может буквально стереть всю таблицу.

Ответ 1

если вы используете Sql Server

delete from Table where id between 79 and 296

После вашего редактирования: теперь вы уточнили, что хотите:

ID (>79 AND < 296)

Поэтому используйте это:

delete from Table where id > 79 and id < 296

Ответ 2

Вы дали идентификатор состояния ( > 79 и < 296), тогда ответ будет следующим:

delete from tab
where id > 79 and id < 296

это то же самое, что:

delete from tab
where id between 80 and 295

если id - целое число.

Все ответили:

delete from tab
where id between 79 and 296

это то же самое, что:

delete from tab
where id => 79 and id <= 296

Обратите внимание на разницу.

Ответ 3

DELETE FROM table 
WHERE id BETWEEN 79 AND 296

Ответ 4

Если вы напишете это как на SQL-сервере, тогда не будет никакой опасности вытереть таблицу базы данных, если все значения в этой таблице фактически не будут находиться между этими значениями:

DELETE FROM [dbo].[TableName] WHERE [TableName].[IdField] BETWEEN 79 AND 296 

Ответ 5

Мое беспокойство заключается в том, что я говорю delete evertything с идентификатором ( > 79 AND < 296) то он может буквально стереть всю таблицу...

Это не произойдет, потому что у вас будет предложение where. Случается, что если у вас есть выражение типа delete * from Table1 where id between 70 and 1296, первое, что сделает процессор запросов sql, - это сканировать таблицу и искать эти записи в этом диапазоне, а затем применить удаление.

Ответ 6

вы также можете просто изменить свое удаление на select *

и проверьте свой выбор

выбранные записи будут такими же, как те, которые были удалены

вы также можете обернуть свой оператор в начале/откате, если вы не уверены - проверьте утверждение, если все хорошо удалите откат

например

SELECT * FROM table ГДЕ ИД МЕЖДУ 79 И 296

отобразит все записи, соответствующие если это то, что вы действительно хотите удалить, используйте

УДАЛИТЬ ИЗ таблицы ГДЕ ИД МЕЖДУ 79 И 296

Вы также можете создать триггер/который ловит удаляет и помещает их в таблицу истории

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

(сохраняйте записи в таблице истории не старше 6 месяцев или, как ни странно, в бизнес-правилах)

Ответ 7

Вы можете использовать этот способ, потому что идентификатор не может быть последовательным во всех случаях.

SELECT * 
FROM  `ht_news` 
LIMIT 0 , 30