Удалить (SQL)
Эта статья в значительной степени или полностью опирается на один источник . ( сентябрь 2019 г. ) |
В языке структурированных запросов к базе данных ( SQL ) оператор DELETE используется для удаления одной или нескольких записей из таблицы . Подмножество может быть определено для удаления с использованием условия, в противном случае все записи будут удалены. [1] Некоторые системы управления базами данных (СУБД), такие как MySQL , позволяют удалять строки из нескольких таблиц с помощью одного оператора DELETE (иногда это называют многотабличным DELETE).
Примеры
[ редактировать ]Удалите строки из круговых таблиц , где столбца вкус равен лимонному безе :
DELETE FROM pies
WHERE flavor='Lemon Meringue';
Удалить строки в деревьях , если значение высоты меньше 80.
DELETE FROM trees
WHERE height < 80;
Удалить все строки из mytable :
DELETE FROM mytable;
Удалите строки из mytable, используя подзапрос в условииwhere:
DELETE FROM mytable
WHERE id IN (
SELECT id
FROM mytable2
);
Удалите строки из mytable, используя список значений:
DELETE FROM mytable
WHERE id IN (
value1,
value2,
value3,
value4,
value5
);
Пример со связанными таблицами
[ редактировать ]Предположим, имеется простая база данных, в которой перечислены люди и адреса. По одному и тому же адресу может проживать более одного человека, а один человек может проживать более чем по одному адресу (это пример связи «многие ко многим »). В базе данных есть только три таблицы: person , адрес и pa , со следующими данными:
|
|
|
Таблица pa связывает таблицы лиц и адресов, показывая, что Джо, Боб и Энн живут на Мейн-стрит 2001 года, но Джо также проживает на бульваре Пико.
Чтобы удалить Джо из базы данных, необходимо выполнить два удаления:
DELETE FROM person WHERE pid=1;
DELETE FROM pa WHERE pid=1;
Чтобы сохранить ссылочную целостность, записи Джо должны быть удалены как из человека , так и из компьютера . Возможно, помимо трех таблиц в базе данных также настроен триггер, чтобы при каждом удалении строки из person все связанные строки удалялись из pa . Тогда первое утверждение:
DELETE FROM person WHERE pid=1;
вызовет автоматически второй:
DELETE FROM pa WHERE pid=1;
Функции
[ редактировать ]- Это команда DML (язык манипулирования данными), поэтому для этой команды используются следующие команды: COMMIT и ROLLBACK.
- Удаляет все или некоторые записи из таблицы. Вы можете ограничить количество удаляемых записей, используя предложение WHERE.
- Не освобождает место, занимаемое данными в таблице (в TABLESPACE)
- Не сбрасывает значение SEQUENCE, присвоенное таблице.
- DELETE работает намного медленнее, чем TRUNCATE.
- Отменить операцию удаления записей можно с помощью команды ROLLBACK.
- DELETE требует блокировки общей таблицы.
- Вызывает огонь
- DELETE можно использовать в случае: ссылки на базу данных
- DELETE возвращает количество удаленных записей.
- Журнал транзакций — DELETE необходимо читать записи, проверять ограничения, обновлять блок, обновлять индексы и генерировать повтор/отмену. Все это требует времени, следовательно, это занимает гораздо больше времени, чем при использовании TRUNCATE.
- снижает производительность при выполнении — каждая запись в таблице блокируется на удаление
- DELETE использует больше транзакционного пространства, чем оператор TRUNCATE.
- DELETE можно использовать с индексированными представлениями.
- DELETE генерирует небольшое количество операций повтора и большое количество операций отмены.
- Операция DELETE не делает непригодные для использования индексы снова пригодными для использования.
Связанные команды
[ редактировать ]Удаление всех строк из таблицы может занять очень много времени. Некоторые СУБД [ нужны разъяснения ] предложите команду TRUNCATE TABLE , которая работает намного быстрее, поскольку она только изменяет метаданные и обычно не тратит время на соблюдение ограничений или срабатывание триггеров.
DELETE удаляет только строки. Для полного удаления таблицы DROP можно использовать команду .
Ссылки
[ редактировать ]- ^ «Оператор удаления SQL» . w3schools.com.
Внешние ссылки
[ редактировать ]- Усечение и удаление баз данных SQL дает примеры функций операторов DELETE.