268
Приложение B
Вооружившись
этой информацией, уже можно создать выражение
delete
, удаляющее все строки,
значение столбца
login_date
которых
меньше даты, возвращенной запросом:
mysql>
DELETE FROM login_history
> WHERE login_date < '20040702 09:00:00';
Query OK, 262 rows affected (0.02 sec)
Теперь таблица содержит 50 последних регистраций. Однако MySQL
расширения позволяют достичь тех же результатов с помощью единст
венного
выражения
delete
с блоками
limit
и
order
by
. Возвратив исход
ные 312
строк в таблицу
login_history
, можно выполнить следующее
выражение:
mysql>
DELETE FROM login_history
> ORDER BY login_date ASC
> LIMIT 262;
Query OK, 262 rows affected (0.05 sec)
Это выражение сортирует строки по возрастанию значений столбца
login_date
, затем первые 262
строки удаляются, а 50 самых свежих
строк остаются.
В этом примере для построения блока
limit
необходимо было
знать число строк в таблице (312 исходных строк – 50 остав
шихся строк = 262 удалений).
Лучше было бы отсортировать
строки в убывающем порядке, указать серверу пропустить пер
вые 50 строк и затем удалить оставшиеся строки:
DELETE FROM login_history
ORDER BY login_date DESC
LIMIT 49, 9999999;
Однако MySQL не обеспечивает
возможности применения вто
рого необязательного параметра при использовании блока
limit
в выражениях
delete
или
update
.
С
помощью блоков
limit
и
order
by
можно не только удалять, но и об
новлять данные.
Например, если банк решает для удержания лояль
ных клиентов добавить по 100 долларов на каждый из десяти самых
старых счетов, можно сделать следующее:
mysql>
Достарыңызбен бөлісу: