Как удалить диапазон записей сразу на MySQL? - PullRequest
39 голосов
/ 02 ноября 2011

В моей таблице более 60000 строк.Как я могу удалить строки от 40000 до 50000 одновременно?

Ответы [ 4 ]

80 голосов
/ 02 ноября 2011

Вы можете использовать функцию between:

delete from exampleTable where id between 40000 and 50000

или

delete from exampleTable where id >= 40000 and id <= 50000

довольно просто?

3 голосов
/ 02 ноября 2011

Я предполагаю, что вы хотите сделать это в соответствии с порядком таблицы по умолчанию, а у вас нет естественного ключа или другого способа упорядочить их в данных таблицы.

т.е. SELECT * FROM WORDS возвращает:

Hi
Hello
Bye
Goodbye
What's up

Итак, если вы сказали, что хотите удалить строки со 2 по 4, хотите ли вы удалить Hello, Bye и Goodbye. Правильно?

Является ли порядок возврата вашей таблицы детерминированным? Другими словами, вы получаете результаты в том же порядке каждый раз? В идеале вы должны были бы идентифицировать столбец в вашей таблице, содержащий данные, которые вы могли бы указать, что позволило бы вам использовать ответ Трикера.

Если это не так, вам нужно использовать номер строки для вашего оператора между. Я не пользователь MySQL, приведенный ниже код, несомненно, будет чище, если бы я был. Кроме того, у меня даже нет базы данных mysql для проверки запроса. Я собрал SQL-оператор, используя этот пост в качестве справки о том, как получить номер строки в MySQL Как с помощью MySQL создать столбец, содержащий индекс записи в таблице?

Мой запрос предполагает, что у вас есть какой-то первичный ключ в вашей таблице. Если нет, то нет способа гарантировать, что вы не удалите посторонние строки, плюс это хороший дизайн таблицы.

DELETE FROM YOUR_TABLE 
WHERE primarykey = 
(SELECT  primarykey FROM 
   (SELECT t.primarykey, 
           @curRow := @curRow + 1 AS row_number
   FROM    YOUR_TABLE t
   JOIN    (SELECT @curRow := 0) r) 
WHERE row_number between 40000 and 50000);
0 голосов
/ 12 июня 2014

Таблица: продуктовый

id item

1 рис 2 мыло 3 рис 4 рис

УДАЛЕНИЕ ИЗ «бакалеи» ГДЕ пункт = «рис» LIMIT 2;

Это намного проще, чем все идеи.для этого конкретного элемента можно удалить 2 записи.

И ответ таков:

2 строки удалены.

ВЫБРАТЬ * ИЗ бакалеи;

идентификатор товара

1 рис 2 мыла

0 голосов
/ 05 января 2013

Если у вас нет первичного ключа и вы хотите удалить по количеству строк, т.е. диапазон строк, это может быть сделано через импорт экспорта MySQL. Выполните пользовательский экспорт - укажите начальную строку и количество. В вашем случае вам понадобятся два экспорта: один для строк 0-40k, второй для 50-last. Затем импортируйте эти два файла в таблицу. Примечание: если импорт больших файлов является проблемой, я рекомендую BigDump. http://www.ozerov.de/bigdump/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...