Время от времени возникает задача удаления записей из базы данных, например, комплектующие могут устаревать и быть снятыми с производства. Для того чтобы отразить этот факт в учебной базе данных, необходимо удалить соответствующую запись в таблице products.
Для удаления записей из таблиц предусмотрено два оператора:
- DELETE
- TRUNCATE TABLE
Оператор delete имеет следующий синтаксис:
DELETE FROM tbl
WHERE where_definition
Order by ...
LIMIT rows
Оператор удаляет из таблицы tbl записи, удовлетворяющие условию where_definition. В листинге 8.1 из таблицы catalogs удаляются записи, имеющие значение первичного ключа id_catalog больше двух.
mysql> DELETE FROM catalogs WHERE id_catalog > 2;
mysql> SELECT * FROM catalogs;
----------- +----------- +
id_catalog I name I
----------- +----------- +
2 |Материнские платы
1 | Процессоры |
Если в операторе delete отсутствует условие where, из таблицы удаляются все запросы.
Применение ограничения limit позволяет задать максимальное число записей, котрые могут быть уничтожены. В листинге 8.3 удаляются все записи таблицы orders, но не более 3 записей
Так как таблица содержит 5 записей, то в результате в таблице остаются две записи. Инструкция order by обычно применяется совместно с ключевым словом limit. Например, если необходимо удалить 20 первых записей таблицы, то производится сортировка по полю datetime — это гарантирует, что удаляться будут в первую очередь самые старые таблицы.
Оператор truncate table, в отличие от оператора delete, полностью очищает таблицу и не допускает условного удаления. То есть оператор truncate table аналогичен оператору delete без условия where и ограничения limit. В отличие от оператора delete, удаление происходит гораздо быстрее, т. к. осуществляется не перебор каждой записи, а полное очищение таблицы.
Операция обновления позволяет менять значения полей в уже существующих записях, это может понадобиться при изменении цен комплектующих, их количества на складе и т. д. Для обновления данных предназначены операторы update и replace. Первый позволяет обновлять отдельные поля в уже существующих записях, тогда как оператор replace больше похож на insert, за исключением того, что если старая записьв данной таблице имеет то же значение индекса unique или primary key, что и новая, то старая запись перед занесением новой будет удалена.