Команда DELETE
Если вам необходимо удалить одну, несколько или все записи в таблице базы данных, то с этим вам поможет команда DELETE
.
Синтаксис запроса на удаление записи.
1 |
DELETE FROM table_name WHERE condition; |
Будьте предельно внимательны при выполнении запросов на удаление записей! Если вы не укажите команду WHERE
и последующее условие, то будут удалены все записи в таблице.
Удаление нескольких записей таблицы
Для примера удалим несколько записей из таблицы books, которая хранится в базе данных Bookstore.
Оповестим сервер MySQL о базе данных, для которой будут выполнятся запросы.
1 |
USE Bookstore; |
Далее выведем записи таблицы books с идентификаторами с 1 по 5.
mysql> SELECT id, title, author, price, discount FROM books WHERE id BETWEEN 1 AND 5;
+----+-----------------------+------------------------------+--------+----------+
| id | title | author | price | discount |
+----+-----------------------+------------------------------+--------+----------+
| 1 | Капитанская дочка | А.С.Пушкин | 151.20 | 0 |
| 2 | Мертвые души | Н.В.Гоголь | 141.00 | 0 |
| 3 | Анна Каренина | Л.Н.Толстой | 135.00 | 20 |
| 4 | Бесы | Ф.М.Достоевский | 122.00 | 0 |
| 5 | Нос | Н.В.Гоголь | 105.00 | 0 |
+----+-----------------------+------------------------------+--------+----------+
5 rows in set (0.00 sec)
mysql>
Допустим необходимо удалить все записи с книгами за авторством Н.В.Гоголя. Запрос на удаление и его результат будет выглядеть следующим образом.
mysql> DELETE FROM books WHERE author='Н.В.Гоголь';
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT id, title, author, price, discount FROM books WHERE id BETWEEN 1 AND 5;
+----+------------------------+------------------------------+--------+----------+
| id | title | author | price | discount |
+----+------------------------+------------------------------+--------+----------+
| 1 | Капитанская дочка | А.С.Пушкин | 151.20 | 0 |
| 3 | Анна Каренина | Л.Н.Толстой | 135.00 | 20 |
| 4 | Бесы | Ф.М.Достоевский | 122.00 | 0 |
+----+------------------------+------------------------------+--------+----------+
3 rows in set (0.00 sec)
mysql>
Удаление всех записей таблицы
Если вам нужно очистить всю таблицу от имеющихся в ней данных, то просто выполните команду DELETE
без каких либо условий.
Следующая команда удалит все записи в таблице books.
1 |
DELETE FROM books; |
Как удалить записи в таблице базы данных MySQL с помощью PHP (PDO)
Для удаления нескольких несвязанных записей, удобнее воспользоваться HTML-формой, где в конце каждой строки будет стоять поле для флага (checkbox), при установке которого, строка будет считаться выделенной для удаления.
Создадим файл index.php
, в котором выведем первые 5 записей таблицы books и разместим в них код формы с полем для флага.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>DELETE</title> <style> table{border-spacing: 0;border-collapse: collapse;} td, th{padding: 10px;border: 1px solid black;} td:last-child{text-align:center;} </style> </head> <body> <?php $db_server = "localhost"; $db_user = "root"; $db_password = "MySafePass4!"; $db_name = "Bookstore"; try { /// Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль, // также сообщаем серверу в какой кодировке должны вводится данные в таблицу бд. $db = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8")); // Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения) $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Запрос на вывод записей из таблицы $sql = "SELECT id, title, author, price, discount FROM books LIMIT 5"; // Подготовка запроса $statement = $db->prepare($sql); // Выполняем запрос $statement->execute(); // Получаем массив строк $result_array = $statement->fetchAll(); // Создаем таблицу вывода и форму для удаления записей echo "<form action='delete.php' method='POST'><table>"; echo "<tr><th>id</th><th>Title</th><th>Author</th><th>Price</th><th>Discount</th><th>Удалить запись</th></tr>"; foreach ($result_array as $result_row) { echo "<tr>"; echo "<td>" . $result_row["id"] . "</td>"; echo "<td>" . $result_row["title"] . "</td>"; echo "<td>" . $result_row["author"] . "</td>"; echo "<td>" . $result_row["price"] . "</td>"; echo "<td>" . $result_row["discount"] . "</td>"; echo "<td><input type='checkbox' name='delete_row[]' value='" . $result_row["id"] . "'></td>"; echo "</tr>"; } echo "</table><br><input type='submit' value='Удалить выделенные записи'></form>"; } catch(PDOException $e) { echo "Ошибка при удалении записи в базе данных: " . $e->getMessage(); } // Закрываем соединение $db = null; ?> </body> </html> |
Откроем в браузере страницу index.php
и увидим следующую таблицу с записями.

Для того чтобы наша форма сработала, необходимо также создать файл delete.php
, в котором будем обрабатывать полученные от формы идентификаторы записей, а также составим и выполним запрос на удаление выбранных записей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php $db_server = "localhost"; $db_user = "root"; $db_password = "MySafePass4!"; $db_name = "Bookstore"; try { // Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль $db = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_password); // Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения) $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Создаем массив, в котором будем хранить идентификаторы записей $ids_to_delete = array(); // Переносим данные (отмеченные записи) из полей формы в массив foreach($_POST['delete_row'] as $selected){ $ids_to_delete[] = $selected; } // Если пользователь не отметил ни одной записи для удаления, // то прерываем выполнение кода if(empty($ids_to_delete)){ echo "Вы не выделили ни одной записи для удаления!"; return; } // Если есть хоть одно заполненное поле формы (запись выделена для удаления), // то составляем запрос. if(sizeof($ids_to_delete > 0)){ // Запрос на удаление выделенных записей в таблице $sql = "DELETE FROM books WHERE id IN (" . implode(',', array_map('intval', $ids_to_delete)) . ")"; // Перед тем как выполнять запрос предлагаю убедится, что он составлен без ошибок. // echo $sql; // Подготовка запроса. $statement = $db->prepare($sql); // Выполняем запрос. $statement->execute(); echo "Записи c id: " . implode(',', array_map('intval', $ids_to_delete)) . " успешно удалены!"; } } catch(PDOException $e) { echo "Ошибка при удалении записи в базе данных: " . $e->getMessage(); } // Закрываем соединение. $db = null; ?> |
Теперь после того как мы выбрали две записи на удаление, а файл delete.php
успешно получил данные и выполнил составленный запрос, мы увидим таблицу, в которой записи с идентификаторами 4 и 5 будут отсутствовать, а на их место сдвинутся записи идущие далее.

Заключение
В данной статье мы рассмотрели правила и возможности использования команды DELETE
для удаления записей из таблицы базы данных, используя терминал. Также увидели, то как быстро можно удалить сразу несколько записей из таблицы с помощью PHP (PDO).