2012-06-19 5 views
0

мне нужен MySQL Skript, который выполняет следующие действия:MySQL скрипт для удаления данных в куски, пока все ниже, чем идентификатор был удален

удалить куски базы данных, пока не будет удален весь link_id-х больше чем 10000

exmaple:

x = 10000 
DELETE FROM pligg_links WHERE link_id > x and link_id < x+10000 
x = x + 10000 
... 

Так было бы удалить

DELETE FROM pligg_links WHERE link_id > 10000 and link_id < 20000 

затем

DELETE FROM pligg_links WHERE link_id > 20000 and link_id < 30000 

пока все идентификаторы менее чем 10000 были удалены

мне это нужно, потому что база данных очень очень большой (более кабриолете)

спасибо заранее

+0

проверить мой обновленный ответ будет решить вашу проблему –

+0

Нет же ошибка все еще не подходя;) – Chriswede

ответ

1

что проблема в ::

DELETE FROM pligg_links WHERE link_id > 10000 

Существует еще один способ сделать это: (просто выполнить эти 3 запросы в порядке)

Step1 : Insert into pligg_links_temp select * from pligg_links where link_id < 10000; 
Step2 : Drop pligg_links; 
Step3 : Insert into pligg_links select * from pligg_links_temp 
+0

Сво большой, чтобы удалить все сразу! – Chriswede

+0

поверьте мне, я попробовал это, и весь сервер и все сайты перестали работать (я ждал 1 час до перезапуска сервера) – Chriswede

+0

Проверьте мой обновленный ответ ... –

2

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

DELETE FROM pligg_links 
WHERE link_id > 10000 
LIMIT 1000; 

http://dev.mysql.com/doc/refman/5.1/en/delete.html говорит:

The MySQL-specific LIMIT row_count option to DELETE tells the server the maximum number of rows to be deleted before control is returned to the client. This can be used to ensure that a given DELETE statement does not take too much time. You can simply repeat the DELETE statement until the number of affected rows is less than the LIMIT value.

Вы можете определить количество удаленных строк с помощью SELECT ROW_COUNT();, если вы хотите автоматизировать удаление:

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

+1

+1 с лимитом ему не понадобится переменная x –

+0

@biziclop, так мне придется каждый раз запускать это самостоятельно, или он будет автоматически зацикливаться? – Chriswede

+0

Он не будет автоматически закодировать, в цикл, вы можете создать хранимую процедуру mysql или, возможно, небольшой скрипт php. Или рассмотрите второе одношаговое решение Sashi Kant, если это возможно. – biziclop