Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Удаление строк из таблицы.
[ WITH [ RECURSIVE ] with_query [, ...] ]
DELETE FROM [ONLY] table [[AS] alias]
[USING usinglist]
[WHERE condition | WHERE CURRENT OF cursor_name]
[RETURNING * | output_expression [[AS] output_name] [, …]]
DELETE удаляет строки, удовлетворяющие условию WHERE, из указанной таблицы. Если условие WHERE отсутствует, результатом будет удаление всех строк в таблице. В результате получается корректная, но пустая таблица.
По умолчанию DELETE удаляет строки из указанной таблицы и всех её подтаблиц. Если требуется удалять только из конкретной указанной таблицы, необходимо использовать предложение ONLY.
Существует два способа удаления строк из таблицы с использованием данных из других таблиц базы данных: использование подзапроса (subselect) или указание другой таблицы в предложении USING. Какой из методов более подходящий — зависит от конкретной ситуации.
Если указано предложение WHERE CURRENT OF, то удаляемой строкой считается последняя строка, полученная из указанного курсора.
Предложение WHERE CURRENT OF не поддерживается в копии таблицы.
Необязательное предложение RETURNING заставляет DELETE вычислять и возвращать значения на основе каждой фактически удалённой строки. Можно вычислить любое выражение, использующее столбцы удаляемой таблицы и/или столбцы других таблиц, указанных в USING. Синтаксис списка в RETURNING совпадает с синтаксисом выходного списка оператора SELECT.
Для выполнения удаления необходимо иметь привилегию DELETE на соответствующую таблицу.
Примечание: По умолчанию база данных YMatrix устанавливает эксклюзивную блокировку (EXCLUSIVE lock) на таблицу при выполнении операции DELETE над кучей (heap table). Когда детектор глобальной взаимоблокировки включён, режим блокировки для операции DELETE над кучей становится ROW EXCLUSIVE.
После успешного завершения команда DELETE возвращает следующую метку:
DELETE count
где count — количество удалённых строк. Если значение count равно 0, значит, ни одна строка не была удалена (это не считается ошибкой).
Если команда DELETE содержит предложение RETURNING, результат будет аналогичен результату команды SELECT, содержащей столбцы и значения, определённые в списке RETURNING, вычисленные по удалённым строкам.
with_query
ONLY
table
alias
usinglist
condition
cursor_name
output_expression
output_name
База данных YMatrix позволяет ссылаться на столбцы других таблиц в условиях WHERE, указывая их в предложении USING. Например, чтобы удалить запись с именем Hannah из таблицы rank, можно сделать следующее:
DELETE FROM rank USING names WHERE names.id = rank.id AND
name = 'Hannah';
Фактически здесь происходит соединение (join) между таблицами rank и names, и все успешно соединённые строки помечаются как удалённые. Такой синтаксис не является стандартным. Однако такой стиль соединения зачастую проще писать и эффективнее выполнять по сравнению с более стандартным стилем с подзапросом, например:
DELETE FROM rank WHERE id IN (SELECT id FROM names WHERE name
= 'Hannah');
При использовании DELETE для удаления всех строк таблицы (например: DELETE * FROM table;) база данных YMatrix добавляет неявную команду TRUNCATE (если права пользователя это позволяют). Добавленная команда TRUNCATE освобождает дисковое пространство, занимаемое удалёнными строками, без необходимости выполнения VACUUM над таблицей. Это улучшает производительность последующих запросов и полезно для рабочих нагрузок ELT, где часто происходят вставки и удаления в временных таблицах.
Прямое выполнение команд UPDATE и DELETE на конкретных секциях (подтаблицах) секционированных таблиц не поддерживается. Вместо этого эти команды должны выполняться на корневой секционированной таблице (таблице, созданной с помощью команды CREATE TABLE).
Удалить все фильмы, кроме музыкальных:
DELETE FROM films WHERE kind <> 'Musical';
Очистить таблицу films:
DELETE FROM films;
Удалить завершённые задачи и вернуть полную информацию об удалённых строках:
DELETE FROM tasks WHERE status = 'DONE' RETURNING *;
Использовать соединение для удаления:
DELETE FROM rank USING names WHERE names.id = rank.id AND
name = 'Hannah';
Команда соответствует стандарту SQL, за исключением того, что предложения USING и RETURNING являются расширениями базы данных YMatrix, а также возможностью совместного использования конструкций WITH и DELETE.