MySQL удаление записи

Рассмотрим в продолжение курса статей по MySQL удаление записи в таблице и способы очистки самих таблиц. Для удаления определенных строк используется оператор DELETE. Таблицы могут очищаться тем же DELETE, а также с использованием  TRUNCATE или DROP. Структуру таблицы удалит только последний. Примеры для всех случаев приведены во второй части материала.

 

MySQL удаление записи в таблице

Сначала подготовим таблицу для демонстрации из которой будем удалять данные

CREATE TABLE PARTNERS (name VARCHAR(20), city VARCHAR(20), contact VARCHAR(20));

 

Ее структура следующая

describe PARTNERS;

+———+————-+——+——+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————-+——+——+———+——-+
| name | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| contact | varchar(20) | YES | | NULL | |
+———+————-+——+——+———+——-+
3 rows in set (0.00 sec)

 

Наполним таблицу для того чтобы было с чем работать

INSERT INTO PARTNERS (name, city, contact)
VALUES («Volna», «Moscow», «Alex»);

Query OK, 1 row affected (0.01 sec)

 

INSERT INTO PARTNERS (name, city, contact)
-> VALUES («TelecomInc», «Tomsk», «Nikolay»);

Query OK, 1 row affected (0.01 sec)

 

INSERT INTO PARTNERS (name, city, contact)
-> VALUES («Rizer», «Vladivostok», «Boris»);

Query OK, 1 row affected (0.01 sec)

 

Используя самый простой SELECT можно посмотреть что получилось

select * from PARTNERS;

+————+————-+———+
| name | city | contact |
+————+————-+———+
| Volna | Moscow | Alex |
| TelecomInc | Tomsk | Nikolay |
| Rizer | Vladivostok | Boris |
+————+————-+———+
3 rows in set (0.00 sec)

 

Переходим к демонстрации того как происходит в MySQL удаление записи

Оператору DELETE передается имя таблицы, затем значения определенных полей, перечисленные в условии WHERE

delete from PARTNERS
WHERE name = «Rizer»;

Query OK, 1 row affected (0.01 sec)

 

Снова просматриваем содержимое и видим, что последней добавленной записи не стало

select * from PARTNERS;

+————+———+———+
| name | city | contact |
+————+———+———+
| Volna | Moscow | Alex |
| TelecomInc | Tomsk | Nikolay |
+————+———+———+
2 rows in set (0.00 sec)

 

Если условия не указывать будет удалена вся таблица (ее содержимое без структуры)

delete from PARTNERS;

Query OK, 2 rows affected (0.01 sec)

 

select * from PARTNERS;

Empty set (0.00 sec)

 

Сейчас таблица пуста, структура сохранилась. В MySQL удаление записи производится только за счет DELETE, таблицы же могут удаляться и очищаться несколькими методами.

describe PARTNERS;

+———+————-+——+——+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————-+——+——+———+——-+
| name | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| contact | varchar(20) | YES | | NULL | |
+———+————-+——+——+———+——-+
3 rows in set (0.00 sec)

 

MySQL очистка таблицы: DELETE, TRUNCATE, DROP

Особенность оператора DELETE, который использовали только что в том, что строки он удаляет по одной — можно даже добавить параметр LOW_PRIORITY — с ним удаление произойдет только тогда когда отработают все процессы, выполняющие какие-то действия с таблицами.

Механизм действия DELETE делает его очень медленным. Но DELETE позволяет удобно работать с транзакциями.

 

Вновь добавим те же значения в таблицу выполнив INSERT и попробуем другой метод

 

select * from PARTNERS;

+————+————-+———+
| name | city | contact |
+————+————-+———+
| Volna | Moscow | Alex |
| TelecomInc | Tomsk | Nikolay |
| Rizer | Vladivostok | Boris |
+————+————-+———+
3 rows in set (0.00 sec)

 

TRUNCATE PARTNERS;

Query OK, 0 rows affected (0.01 sec)

 

select * from PARTNERS;

Empty set (0.00 sec)

 

Как легко можно заметить TRUNCATE не сосчитал удаленные таблицы — так произошло потому, что он удаляет таблицу и воссоздает ее с той же структурой, но без каких-либо данных.

 

Данные удаляются безвозвратно (используя транзакционный механизм ROLLBACK как в случае с DELETE восстановить их уже не получится). TRUNCATE при этом работает значительно быстрее, чем DELETE и при работе с большими объемами информации лучше использовать его.

 

Структура, как уже говорилось, сохраняется

describe PARTNERS;

+———+————-+——+——+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————-+——+——+———+——-+
| name | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| contact | varchar(20) | YES | | NULL | |
+———+————-+——+——+———+——-+
3 rows in set (0.01 sec)

 

Удалить таблицу полностью можно выполнив DROP TABLE (также используется и с базами данных)

 

DROP TABLE PARTNERS;

Query OK, 0 rows affected (0.00 sec)

select * from PARTNERS;

ERROR 1146 (42S02): Table 'REAL_ESTATE_AGENCY.PARTNERS' doesn't exist

 

 

Такой таблицы больше нет и если требуется продолжить работу потребуется снова ее создать указав имена всех полей и типы данных, которые будет для них использоваться.