Как удалить каждую запись после n-й строки в MySQL? - PullRequest
9 голосов
/ 03 июля 2011

В MySQL я могу запросить select * ... LIMIT 10, 30, где 10 представляет количество пропускаемых записей.

Кто-нибудь знает, как я могу сделать то же самое в операторах удаления, где удаляются все записи после первых 10 записей?

Ответы [ 3 ]

8 голосов
/ 03 июля 2011

Учитывая, что в MySQL (как в Oracle) нет rowId, я бы предложил следующее:

alter table mytable add id int unique auto_increment not null;

Это автоматически нумерует ваши строки в порядке select без условийили по заказу.

select * from mytable;

Затем, после проверки, порядок соответствует вашим потребностям (и, возможно, дамп таблицы)

delete from mytable where id > 10;

Наконец, вы можете удалитьэто поле

alter table mytable drop id;
3 голосов
/ 03 июля 2011

Будет работать НЕ :

DELETE 
FROM table_name 
WHERE id IN
  ( SELECT id
    FROM table_name
    ORDER BY          --- whatever
    LIMIT 10, 30
  ) 

Но это будет:

DELETE 
FROM table_name 
WHERE id IN
  ( SELECT id
    FROM 
      ( SELECT id
        FROM table_name
        ORDER BY          --- whatever
        LIMIT 10, 30
      ) AS tmp
  ) 

И это тоже:

DELETE table_name 
FROM table_name 
  JOIN
    ( SELECT id
      FROM table_name
      ORDER BY          --- whatever
      LIMIT 10, 30
    ) AS tmp
    ON tmp.id = table_name.id 
0 голосов
/ 09 июля 2016

При удалении большого количества строк это эффективный прием:

CREATE TABLE new LIKE real;   -- empty table with same schema
INSERT INTO new SELECT * FROM real ... LIMIT 10;  -- copy the rows to _keep_
RENAME TABLE real TO old, new TO real;  -- rearrange
DROP TABLE old;  -- clean up.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...