UPDATE. Редактирование записей в таблице базы данных MySQL

Команда UPDATE

Часто возникает необходимость изменения информации, хранящейся в базе данных. С помощью команды UPDATE вы сможете обновлять данные одной или нескольких колонок в каждой записи таблицы.

Синтаксис запроса на обновление данных.

Для примера заполним таблицу books для хранения книг из условной базы данных Bookstore, которую мы создали в одном из предыдущех постов.

Сначала выберем базу данных, для которой будем выполнять запросы.

Посмотрим какие данные сейчас хранятся в колонках id, title, author, price, discount, amount таблицы books для первых 5 записей.

mysql> SELECT id, title, author, price, discount, amount FROM books LIMIT 5;
+----+--------------------------+-------------------+--------+----------+--------+
| id | title                    | author            | price  | discount | amount |
+----+--------------------------+-------------------+--------+----------+--------+
|  1 | Дубровский               | Александр Пушкин  | 230.00 |        0 |      4 |
|  2 | Нос                      | Николай Гоголь    | 255.20 |        0 |      7 |
|  3 | Мастер и Маргарита       | Михаил Булгаков   | 240.50 |        0 |     10 |
|  4 | Мёртвые души             | Николай Гоголь    | 173.00 |        0 |      3 |
|  5 | Преступление и наказание | Фёдор Достоевский | 245.00 |        0 |      3 |
+----+--------------------------+-------------------+--------+----------+--------+
5 rows in set (0.00 sec)

mysql>

Обновим цену, процент скидки и уменьшим количество на 2 для книги с идентификатором 3.

Теперь проверим как обновились данные.

mysql> UPDATE books 
    -> SET price=263.00, discount=10, amount=amount-2
    -> WHERE id=3;
Query OK, 1 rows affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT id, title, author, price, discount, amount FROM books LIMIT 5;
+----+--------------------------+-------------------+--------+----------+--------+
| id | title                    | author            | price  | discount | amount |
+----+--------------------------+-------------------+--------+----------+--------+
|  1 | Дубровский               | Александр Пушкин  | 230.00 |        0 |      4 |
|  2 | Нос                      | Николай Гоголь    | 255.20 |        0 |      7 |
|  3 | Мастер и Маргарита       | Михаил Булгаков   | 263.00 |       10 |      8 |
|  4 | Мёртвые души             | Николай Гоголь    | 173.00 |        0 |      3 |
|  5 | Преступление и наказание | Фёдор Достоевский | 245.00 |        0 |      3 |
+----+--------------------------+-------------------+--------+----------+--------+
5 rows in set (0.00 sec)

mysql>

Обновление данных для нескольких записей в MySQL

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

Попробуем добавить скидку в 5% для всех книг под авторством Николая Гоголя, а также в название книги добавим слово "(Акция)".

Запрос на обновление данных, в этом случае, будет выглядеть так:

В запросе используется функция CONCAT(), которая прибавляет к текущему значению поля title строку "(Акция)".

В результате получим следующие изменения.

mysql> UPDATE books 
    -> SET discount=5, title=CONCAT(title," (Акция)")
    -> WHERE author="Николай Гоголь";
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> SELECT id, title, author, price, discount, amount FROM books LIMIT 5;
+----+--------------------------+--------------------+--------+----------+--------+
| id | title                    | author             | price  | discount | amount |
+----+--------------------------+--------------------+--------+----------+--------+
|  1 | Дубровский               | Александр Пушкин   | 230.00 |        0 |      4 |
|  2 | Нос (Акция)              | Николай Гоголь     | 255.20 |        5 |      7 |
|  3 | Мастер и Маргарита       | Михаил Булгаков    | 263.00 |       10 |      8 |
|  4 | Мёртвые души (Акция)     | Николай Гоголь     | 173.00 |        5 |      3 |
|  5 | Преступление и наказание | Фёдор Достоевский  | 245.00 |        0 |      3 |
+---------+--------------------------+--------------------+--------+----------+--------+
5 rows in set (0.00 sec)

mysql>

Будьте предельно внимательны при обновлении данных в таблицах, так как если вы вдруг забудете задать условие обновления и не напишите команду WHERE, то указанное в запросе обновление будет применено ко всем строкам в таблице!

Пример того, что может получится если не указать команду WHERE.

В результате запроса выше получим одинаковую цену и название для всех книг в таблице.

mysql> UPDATE books SET price=103.90, title="Барышня-крестьянка";
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0

mysql> SELECT id, title, author, price, discount FROM books LIMIT 5;
+----+------------------------+--------------------+--------+----------+
| id | title                  | author             | price  | discount |
+----+------------------------+--------------------+--------+----------+
|  1 | Барышня-крестьянка     | Александр Пушкин   | 103.90 |        0 |
|  2 | Барышня-крестьянка     | Николай Гоголь     | 103.90 |        5 |
|  3 | Барышня-крестьянка     | Михаил Булгаков    | 103.90 |       10 |
|  4 | Барышня-крестьянка     | Николай Гоголь     | 103.90 |        5 |
|  5 | Барышня-крестьянка     | Фёдор Достоевский  | 103.90 |        0 |
+----+------------------------+--------------------+--------+----------+
5 rows in set (0.00 sec)

mysql>

Как обновить записи в таблице базы данных MySQL с помощью PHP (PDO)

Для обновления большого количества данных, гораздо удобнее будет воспользоваться HTML-формой, поля которой будут соответствовать полям таблицы из базы данных. Форму разместим в файле index.php.

Перед созданием формы мы обратимся к нашей таблице books и выведем данные, которые в ней хранятся, просто для того чтобы видеть, что содержит таблица и не редактировать ее вслепую.

В результате получится следующая страница с формой для редактирования записей в таблице books.

Результат выполнения файла index.php
Результат выполнения файла index.php

Далее нам понадобится файл update.php для составления и выполнения запроса на редактирование таблицы books, на основе данных полученных в форме.

Чтобы убедится в успешности работы можем еще раз запустить страницу index.php, на которой можно увидеть обновленную запись с id=1.

Результат выполнения запроса в файле update.php
Результат выполнения запроса в файле update.php

Заключение

В этой статье, на различных примерах, мы рассмотрели, как можно использовать команду UPDATE для редактирования записей в таблицах базы данных MySQL. Заодно также увидели, неплохой на мой взгляд пример того, как можно вывести таблицу и отредактировать ее используя HTML-форму.