Оператор DELETE стр. 1
Оператор DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL (T-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft SQL Server и Sybase ASE. Transact-SQL также выполнить с помощью команды
Однако есть ряд особенностей в реализации команды TRUNCATE TABLE , которые следует иметь в виду:
- не журнализируется удаление отдельных строк таблицы; в журнал записывается только освобождение страниц, которые были заняты данными таблицы;
- не отрабатывают триггеры, в частности, триггер на удаление;
- команда неприменима, если на данную таблицу имеется ссылка по внешнему ключу, и даже если внешний ключ имеет опцию каскадного удаления.
- значение счетчика ( IDENTITY ) сбрасывается в начальное значение.
Требуется удалить из таблицы Laptop все портативные компьютеры с размером экрана менее 12 дюймов.
Все блокноты можно удалить с помощью оператора
Transact-SQL расширяет синтаксис оператора DELETE , вводя дополнительное предложение FROM :
При помощи источника табличного типа можно конкретизировать данные, удаляемые из таблицы в первом предложении FROM .
При помощи этого предложения можно выполнять соединения таблиц, что логически заменяет использование подзапросов в предложении WHERE для идентификации удаляемых строк. Поясним сказанное на примере.
Пусть требуется удалить те модели ПК из таблицы Product, для которых нет соответствующих строк в таблице PC.
Используя стандартный синтаксис, эту задачу можно решить следующим запросом:
Заметим, что предикат type = ‘pc’ необходим здесь, чтобы не были удалены также модели принтеров и портативных компьютеров.
Эту же задачу можно решить с помощью дополнительного предложения FROM следующим образом:
Здесь применяется внешнее соединение, в результате чего столбец PC.model для моделей ПК, отсутствующих в таблице PC, будет содержать NULL -значение, что и используется для идентификации подлежащих удалению строк.
Страницы: | 1 | 2 | 3 |
Как очистить таблицу в MySQL
В статье мы расскажем, как в MySQL очистить таблицу. Мы покажем два способа и объясним разницу между ними.
Очистить таблицу можно при помощи одной из команд:
Разница между TRUNCATE и DELETE
Команда TRUNCATE является оператором DDL. DDL (Data Definition Language) — это язык определения данных. Операторы языка DDL управляют объектами баз данных: удаляют, создают или переименовывают объекты БД.
Команда DELETE является DML-оператором. DML (Data Manipulation Language) — это язык манипуляции данными. Операторы языка DML позволяют вставить, удалить, изменить, извлечь или обновить данные в базе.
Сравним работу команд:
TRUNCATE | DELETE |
---|---|
Удаляет все данные из таблицы | Может удалить часть данных в соответствии с условием WHERE |
Удаляет все строки из таблицы освобождением страниц | Удаляет строки по одной |
Записывает в журнал транзакций сведения о каждой удалённой странице, а не строке | Делает запись в журнал транзакций при удалении каждой строки |
Работает быстрее | Работает медленнее |
Нужны привилегии ALTER | Нужны привилегии DELETE |
Сбрасывает идентификаторы | Не сбрасывает идентификаторы |
Блокирует таблицу и страницу перед удалением | Блокирует строку перед её удалением |
Выбор команды зависит от конкретного случая. Если нужно удалить некоторые строки по условию, подойдёт только DELETE. Если нужно полностью очистить таблицу и сбросить идентификаторы, используйте TRUNCATE.
Понять разницу между командами и определиться с их выбором поможет таблица с операторами каждого языка:
DDL | DML |
---|---|
CREATE | SELECT |
ALTER | INSERT |
DROP | UPDATE |
TRUNCATE | DELETE |
COMMENT | MERGE |
RENAME | CALL |
EXPLAIN PLAN | |
LOCK TABLE |
Таким образом, операторы DDL управляют структурой, а операторы DML — её содержимым.
Как в MySQL очистить таблицу
Подключитесь к серверу по SSH. Затем подключитесь к MySQL при помощи команды:
mysql -u username -p’password’
Вместо username введите имя пользователя, вместо password — пароль.
Если вы не знаете пароль, попробуйте войти без него при помощи команды:
mysql
Если подключение без пароля не настроено, возникнет ошибка:
В этом случае сбросьте пароль от root-пользователя MySQL по инструкции.
TRUNCATE
TRUNCATE полностью очищает таблицу без возможности указать дополнительные условия. Для этого:
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
USE db_name;
Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:
TRUNCATE table_name;
TRUNCATE позволяет указать название БД и название таблицы в одном запросе. Для этого используйте команду:
TRUNCATE db_name.table_name;
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу.
DELETE
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
USE db_name;
Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:
DELETE FROM table_name;
Вы можете указать название БД и таблицы в одном запросе:
DELETE FROM db_name.table_name;
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу при помощи DELETE.
DELETE позволяет использовать условие WHERE, чтобы удалить некоторые строки из таблицы:
DELETE FROM table_name WHERE condition;
Где condition — это условие.
Пример команды, в котором будут удалены все строки, значение столбца, id которых больше 1000:
DELETE FROM table_name WHERE id > 1000;
Как проверить содержимое таблицы
Если вы хотите убедиться, что в таблице не осталось данных, воспользуйтесь командой:
SELECT * FROM db_name.table_name;
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Если таблица пустая, вывод будет следующим:
Помогла ли вам статья?
Спасибо за оценку. Рады помочь
Руководство по SQL. Очистка таблицы.
Для полного удаления всех данных из таблицы, в языке SQL используется команда TRUNCATE TABLE. Конечно, мы можем использовать команду DROP TABLE, для удаления данных и создать такую же таблицу, но нам придётся создавать её повторно. В подобных случаях, команда TRUNCATE TABLE крайне облегчает нам работу.
Запрос с использованием команды TRUNCATE TABLE имеет следующий вид:
TRUNCATE TABLE имя_таблицы;
Предположим, что у нас есть таблицы developers_copy, которая содержит следующие записи:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2 | 2000 | | 2 | Peter Romanenko | C++ | 3 | 3500 | | 3 | Andrei Komarov | JavaScript | 2 | 2100 | +----+-------------------+------------+------------+--------+
Допустим, нам необходимо удалить все записи из данной таблицы.
Для этого мы должны использовать следующую команду:
mysql> TRUNCATE TABLE developers_copy;
Теперь наша таблица developers_copy пуста:
mysql> SELECT * FROM developers_copy; Empty set (0.00 sec)
На этом мы заканчиваем изучение способа удаления всех данных из таблицы.
В следующей статье мы рассмотрим использование отображений в языке SQL.
Как удалить данные из таблицы sql
Время от времени возникает задача удаления записей из таблицы. Для этого в SQL предусмотрены операторы DELETE и TRUNCATE , из которых наиболее универсальным и безопасным является первый вариант.
MySQLDELETE FROM имя_таблицы [WHERE условие_отбора_записей];
Если условие отбора записей WHERE отсутствует, то будут удалены все записи указанной таблицы.
Эту же операцию (удаления всех записей) можно сделать также с помощью оператора TRUNCATE . Он выполнит удаление таблицы и пересоздаст её заново - этот вариант работает гораздо быстрее, чем удаление всех записей одна за другой (как в случае с DELETE ) особенно для больших таблиц.
MySQLTRUNCATE TABLE имя_таблицы;
Оптимизатор запросов СУБД MySQL автоматически использует оператор TRUNCATE , если оператор DELETE не содержит условия WHERE или конструкции LIMIT .
Однако у оператора TRUNCATE есть ряд отличий:
- Не срабатывают триггеры, в частности, триггер удаления
- Удаляет все строки в таблице, не записывая при этом удаление отдельных строк данных в журнал транзакций
- Сбрасывает счётчик идентификаторов до начального значения
- Чтобы использовать, необходимы права на изменение таблицы
Если в DELETE запросе используется JOIN , то необходимо указать из каких(ой) именно таблиц(ы) требуется удалять записи.
MySQLDELETE имя_таблицы_1 [, имя_таблицы_2] FROM имя_таблицы_1 JOIN имя_таблицы_2 ON имя_таблицы_1.поле = имя_таблицы_2.поле [WHERE условие_отбора_записей];
Например, нам необходимо удалить все бронирования жилья, в котором отсутствует кухня. Тогда запрос будет выглядеть следующим образом:
MySQLDELETE Reservations FROM Reservations JOIN Rooms ON Reservations.room_id = Rooms.id WHERE Rooms.has_kitchen = false;
Если бы, помимо удаления бронирования, нам нужно было также удалить и жилье, то запрос приобрёл бы следующий вид:
MySQLDELETE Reservations, Rooms FROM Reservations JOIN Rooms ON Reservations.room_id = Rooms.id WHERE Rooms.has_kitchen = false;