Если с помощью операторов INSERT, UPDATE и REPLACE в MySQL данные добавляются, обновляются и замещаются, то с помощью операторов DELETE и TRUNCATE, MySQL удаляет записи. Оператор DELETE позволяет удалять записи из таблицы и поддерживает использование предложения WHERE для ограниченного удаления только теми записями, которые соответствуют определенному условию. Его синтаксис выглядит следующим образом:
DELETE FROM имя- таблицы WHERE условное- выражение Поэтому в следующей таблице,
Удаление записей
Удалить и уничтожить
Помните, что использование оператора DELETE без предложения WHERE может привести к полному удалению всех записей из таблицы. Поскольку эта операция необратима (за исключением использования таблиц InnoDB с отключенным режимом AUTOCOMMIT), перед выполнением операции удаления необходимо убедиться в том, что вы используете оператор SELECT.
Не указав предложение WHERE, можно удалить все записи таблицы. Листинг 9.31.
mysql> DELETE FROM users;
Query OK, 3 rows affected (0.00 sec)
Это же можно сделать с использованием команды TRUNCATE, которая также удаляет все записи из таблицы. Следующая команда аналогична предыдущей.
Листинг 9.32.
mysql> TRUNCATE TABLE users;
Query ОК, О rows affected (0.05 вес)
Если преследуется цель удаления всех записей из таблицы, то использование оператора TRUNCATE целесообразнее, т.к. оператор TRUNCATE удаляет всю таблицу, а затем воссоздает ее вновь, в то время как оператор DELETE удаляет все записи, не пытаясь модифицировать саму таблицу. Это также является причиной того, что при добавлении записей в таблицу, очищенную оператором DELETE, MySQL еще "помнит" созданную прежде последовательность AUTOINCREMENT и продолжает ее использование для полей, объявленных с ключевым словом AUTOINCREMENT. В то же время таблицы, очищенные с помощью команды TRUNCATE, для полей AUTOINCREMENT всегда начинают новый отсчет с 1.
Заметим, что команда TRUNCATE, в отличие от команды DELETE, не применима при транзакциях. Поэтому попытка выполнения операции TRUNCATE с таблицей, которая участвует в транзакции, всегда приводит к ошибке.
Обращение таблиц
Начиная с версии 4.0, MySQL дает возможность операциям обновления и удаления обновлять/удалять сразу несколько таблиц. Вот несколько примеров:
# увеличить сумму счетов всех заказчиков из Массачуссетса на 10% UPDATE invoices, customers SET invoices.amount = invoices.amount + + (invoices.amount * 0.1) WHERE invoices.customerID = customers. customerID AND customers.location = 'MA';
# обновить регистрационное имя пользователя во всех зонах дискус­сионного форума
UPDATE profiles, forums, groups SET profiles.username = 'hyde', forums.username = 'hyde', groups.username = 'hyde' WHERE profiles, username = 'jekyll' AND profiles.username = forums.username AND profiles.username = groups.username;
# удалить из системы определенного заказчика и все его инвойсы DELETE FROM invoices, customers USING invoices, customers WHERE invoices.customerID = customers.customerID AND customers.customerID = 8 8; 
# удалить из системы всех служащих, одновременно существующих в таблице employees и в таблице departments
DELETE FROM employees, departments USING employees, departments WHERE employees.employeeID = departments.employeeID;