Я удаляю записи из своей базы данных на основе их отметки времени.
Мой запрос прост
delete from calldetailrecord where StartTime between 1262321999000 AND 1309492799000;
1262321999000 = Чт 31 дек 2009 23:59:59 GMT-0500 (Восточное стандартное время)
1296449999000 = Sun Jan 30 2011 23:59:59 GMT-0500 (Восточное стандартное время)
Для миллисекунд я использовал:
http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/, чтобы сделать мои расчеты
Интересно, как я могу сделать цикл while, чтобы удалить данные месяц за месяцем и остановиться, когда больше нет данных.
Интересно, как я могу сделать цикл while для удаления из месяца в месяц, и он остановится, когда данных больше нет.
Если вы хотите удалить все данные из таблицы, используйте команду truncate.
truncate calldetailrecord;
Просто одно delete
сделает это тоже
delete from calldetailrecord;
Похоже, вы хотите сделать выборочное удаление. Сначала создайте периоды времени, которые хотите удалить, сгенерируйте один запрос и запустите его.
DELETE FROM calldetailrecord WHERE StartTime BETWEEN 1353897342 AND 1353897592 OR StartTime BETWEEN 1353897754 AND 1353897764;
Вы должны использовать как минимум соединения с db, насколько это возможно.
Я думаю, что вы получите лучшую производительность таким образом:
Create table new_table as select * calldetailrecord where StartTime > 1309492799000
drop table calldetailrecord;
alter table new_table rename to calldetailrecord;
Это связано с проблемой удаления строки за строкой, которая будет очень медленной.
drop
, create
, alter
привилегии. Обычно пользователи имеют права insert
, update
, delete
и select
.