Синтаксис оператора
DELETE
DELETE [LOW_PRIORITY | QUICK] FROM table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT rows]
или
DELETE [LOW_PRIORITY | QUICK] table_name[.*]
[,table_name[.*] ...]
FROM table-references
[WHERE where_definition]
или
DELETE [LOW_PRIORITY | QUICK]
FROM table_name[.*], [table_name[.*] ...]
USING table-references
[WHERE where_definition]
Оператор
DELETE
удаляет из таблицы
table_name
строки, удовлетворяющие
заданным в
where_definition
условиям, и возвращает число удаленных записей.
Если оператор
DELETE
запускается без определения
WHERE
, то удаляются все
строки. При работе в режиме
AUTOCOMMIT
это будет аналогично использованию опера-
тора
TRUNCATE
. В MySQL 3.23 оператор
DELETE
без определения
WHERE
возвратит
ноль как число удаленных записей.
Если действительно необходимо знать число удаленных записей при удалении всех
строк и если допустимы потери в скорости, то можно использовать команду
DELETE
в
следующей форме:
mysql> DELETE FROM table_name WHERE 1>0;
Следует учитывать, что эта форма работает намного медленнее, чем
DELETE
FROM table_name
без выражения
WHERE
, поскольку строки удаляются поочередно
по одной.
Если указано ключевое слово
LOW_PRIORITY
, выполнение данной команды
DELETE
будет задержано до тех пор, пока другие клиенты не завершат чтение этой табли-
цы.
Если задан параметр
QUICK
, то обработчик таблицы при выполнении удаления не
будет объединять индексы - в некоторых случаях это может ускорить данную операцию.
Символы
.*
после имен таблиц требуются только для совместимости с Access:
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND
t2.id=t3.id
или
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id
AND t2.id=t3.id
В предыдущем случае просто удалены совпадающие строки из таблиц
t1
и
t2
.
Выражение
ORDER BY
и использование нескольких таблиц в команде
DELETE
поддерживается в MySQL 4.0.
Если применяется выражение
ORDER BY
, то строки будут удалены в указанном
порядке. В действительности это выражение полезно только в сочетании с
LIMIT
. Напри-
мер:
DELETE FROM somelog
WHERE user = 'jcole'
74
ORDER BY timestamp
LIMIT 1
Данный оператор удалит самую старую запись (по
timestamp
), в которой строка
соответствует указанной в выражении
WHERE
.
Специфическая для MySQL опция LIMIT для команды DELETE указывает серверу
максимальное количество строк, которые следует удалить до возврата управления клиенту.
Эта опция может использоваться для гарантии того, что данная команда DELETE не потре-
бует слишком много времени для выполнения. Можно просто повторять команду DELETE
до тех пор, пока количество удаленных строк меньше, чем величина LIMIT.
75
|