Как изменить строку mysql

Команда UPDATE, или Как обновить данные в таблице MySQL. Практические руководства для IT-специалистов. В Timeweb Cloud вы можете найти необходимую инструкцию или стать автором. Участвуйте в нашей контент-программе и внесите свой вклад в развитие сообщества.

Blog

Обновление данных в базах — один из ключевых элементов при работе в MySQL. Под обновлением подразумевается изменение значений в существующих записях таблицы. Обновление допускает различные варианты: как изменение значений полей в группе строк (в том числе и всех строк таблицы), так и корректировку значения поля отдельной строки.

Для полноценной работы как с локальными базами данных, так и с облачными базами данных cloud.timeweb.com, важно понимать синтаксис команд для обновления данных.

Команда Update Или Как Обновить Данные В Таблице My SQL (1)

Ключевой командой для изменения записей в таблице базы данных в MySQL является UPDATE. Обновление происходит последовательно, от первой до последней строки, по порядку. В зависимости от типа обновления в MySQL выделяется два синтаксиса для оператора UPDATE

В случае обновления одной таблицы синтаксис выглядит следующим образом:

UPDATE LOW_PRIORITY IGNORE table_reference
    SET assignment_list
    WHERE where_condition
    ORDER BY ...
    LIMIT row_count

Обязательный параметр:

SET assignment_list указывает, какие столбцы нужно изменить и каким образом (assignment_list — список столбцов и новых значений).

Необязательные параметры:

  • LOW_PRIORITY если указан этот параметр, выполнение UPDATE откладывается до тех пор, пока другой пользователь не решит просмотреть данные таблицы.
  • IGNORE в этом сценарии выполнение UPDATE не прерывается, даже если в процессе возникают какие-либо ошибки. Если возникают дубликаты в столбце с уникальным ключом, то такие строки не обновляются. 
  • WHERE where_condition широко известный оператор задает условия, по которым отбираются строки для обновления (where_condition — список условий). Если параметры WHERE не указаны, обновятся все строки таблицы.
  • ORDER BY если указан этот параметр, строки обновляются в заданном порядке.
  • LIMIT row_count ограничение на количество обновляемых строк (row_count некое число строк). Считаются строки, которые попадают под условие WHERE, независимо от того, изменились они или нет. 

В случае обновления нескольких таблиц одновременно синтаксис будет следующим:

UPDATE LOW_PRIORITY IGNORE table_references
    SET assignment_list
    WHERE where_condition

table_references список таблиц, которые мы хотим изменить. Они изменятся таким образом, как указано в assignment_list

При обновлении нескольких таблиц нельзя использовать параметр ORDER BY или LIMIT. Помимо этого, при обновлении нескольких таблиц нет гарантий, что они будут обновлены в указанном порядке.

Остальные параметры запроса (необязательные) — LOW_PRIORITY, IGNORE и WHERE — работают так же, как в сценарии обновления одной таблицы.

Итак, давайте рассмотрим примеры использования оператора UPDATE в MySQL.

Для начала создадим базу данных для книжного магазина. В ней будет 4 таблицы: книги, жанры, писатели и покупки. 

Воспользуемся операторами CREATE TABLE и INSERT INTO, чтобы создать таблицы author, genre, book и sales. 

CREATE TABLE author (
   id INT PRIMARY KEY AUTO_INCREMENT,
    name_author VARCHAR(50) NOT NULL
    );
INSERT INTO author (name_author) 
VALUES ('Leo Tolstoy'), 
('Franz Kafka'), 
('Nikolai Gogol'),
('William Shakespeare'),
('Homer');
CREATE TABLE genre (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    name_genre VARCHAR(30) NOT NULL
);
INSERT INTO genre (name_genre) 
VALUES ('Realist novel'),
('Dystopian novel'),
('Picaresque novel'),
('Epic poetry');
CREATE TABLE book (
    book_id INT PRIMARY KEY AUTO_INCREMENT, 
    title VARCHAR(50), 
    author_id INT NOT NULL, 
    genre_id INT,
    price DECIMAL(8,2) NOT NULL, 
    amount INT DEFAULT 0, 
    FOREIGN KEY (author_id) REFERENCES author (id),
    FOREIGN KEY (genre_id) REFERENCES genre (id)
);
INSERT INTO book (title, author_id, genre_id, price, amount) 
VALUES ('Anna Karenina', 1,1, 650.00, 15),
('The Castle', 2,2, 570.20, 6),
('Dead Souls', 3,3, 480, 2),
('Iliad', 5,4, 518.99, 4),
('Odyssey', 5,4, 518.99, 7);
CREATE TABLE sales (
    id INT PRIMARY KEY AUTO_INCREMENT,
    book_id INT NOT NULL,
    count INT NOT NULL,
    cost DECIMAL(8,2) NOT NULL,
    FOREIGN KEY (book_id) REFERENCES book (book_id)
    );

 Получаем следующие таблицы. Таблица book:

1

Столбцы:

  • book_id – уникальный идентификатор книги;
  • title – название книги;
  • author_id – идентификатор автора (внешний ключ);
  • genre_id – идентификатор жанра (внешний ключ);
  • price – цена книги за один экземпляр; 
  • amount – количество книг на складе.

Таблица genres:

2

Столбцы: 

  • id – уникальный идентификатор;
  • name_genre – обозначение жанра.

Таблица author:

3

Столбцы:

  • id – уникальный идентификатор;
  • name_author – имя автора книги.

Таблица sales:

4

Столбцы:

  • id – уникальный идентификатор операции;
  • book_id – уникальный идентификатор книги из таблицы book (внешний ключ);
  • count – количество купленных книг;
  • cost – общая стоимость товаров.

Операции по обновлению данных

Теперь, создав образец базы данных, мы покажем выполнение различных операций по обновлению данных с использованием оператора UPDATE и других команд в MySQL

1. Обновление всех строк

Если при использовании UPDATE вы не используете задающий условия параметр WHERE, то будут обновлены все строки в таблице. Предположим, в книжном магазине проходит акция «Всё по 500» — изменим цену всех книг на фиксированную 500 рублей:

UPDATE book 
SET price=500;

В результате выполнения запроса мы получим такую табличку:

5

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

Если мы захотим присвоить значение NULL столбцу, при создании которого было указано NOT NULL, то запрос вернет ошибку: 

Column 'name_column' cannot be null

В то же время, если указать параметр IGNORE, то значение будет изменено на значение по умолчанию для конкретного типа: 0 для числовых, “” для символьных и «нулевое» для дат. Например, 0000 для типа данных YEAR или 0000-00-00 00:00:00 для типа DATETIME.

2. Обновление строк с условием

Изменение всех строк таблицы требуется довольно редко. Гораздо чаще нам необходимо обновить значения для какой-то конкретной записи или для нескольких. Допустим, мы хотим изменить строки по какому-то условию. Например, устроим распродажу книг, которых осталось в наличии меньше 5 штук. Для этого в MySQL с командой UPDATE используем оператор WHERE:

UPDATE book 
SET price=300
WHERE amount < 5;

Результат выполнения запроса:

6

Хорошо видно, что изменились только строки с книгами Dead Souls и Iliad, так как только они удовлетворяли прописанному в запросе условию.

3. Обновление значений с выражением

При обновлении мы можем задавать столбцу не только статичное значение, но и выражения. Предположим, в магазине проходит акция, и на книги русских писателей объявлена скидка в 15%:

UPDATE book 
SET price=price * 0.85
WHERE author_id in (1,3);

В таблице author имеется только два русских писателя – Leo Tolstoy и Nikolai Gogol с author_id 1 и 3 соответственно.

Результат выполнения запроса:

7

Обновление значений происходит в определенном порядке: слева направо. Например, следующий запрос сначала увеличит значение amount на 1, а потом удвоит его:

UPDATE book 
SET amount = amount + 1, amount =amount*2;

Результат выполнения запроса:

8

4. Обновление с DEFAULT

Также мы можем изменить значение строк на значения «по умолчанию» DEFAULT, которые задаются при создании или изменении таблицы. Для того чтобы узнать, какие значения в нашей таблице используются по умолчанию, выполним запрос:

DESC book

В результате получим следующую структуру нашей таблицы в MySQL:

9

Заменим значения столбца amount на значение DEFAULT. Так как по умолчанию значение для amount было 0, мы должны получить все 0:

UPDATE book 
SET amount=DEFAULT;

Результат выполнения запроса соответствует ожиданиям:

10

5. Обновление нескольких столбцов

Используя один запрос, мы можем обновить сразу несколько столбцов. Например, изменим значения цены и количества у строк со значением book_id < 4:

UPDATE book 
SET price=price*0.9,
       amount = amount - 1
WHERE book_id < 4;

Результат выполнения запроса:

11

6. Использование LIMIT

Используя параметр LIMIT, мы можем ограничить количество записей, которые должны быть обновлены. Например, обновим только первую строку:

UPDATE book 
SET price=100
WHERE genre_id = 4
LIMIT 1;

В таблице имеется две строки с genre_id равным 4, но, так как мы указали LIMIT 1, обновится только одна:

12

Также следует отметить, что LIMIT N вовсе не означает, что мы обновим N строк. В результате запроса произойдёт обработка первых N строк, подходящих под условие WHERE, независимо от того, обновились эти строки в итоге или нет.

7. Обновление нескольких таблиц

В MySQL мы можем обновить сразу несколько таблиц:

UPDATE book, author 
SET amount=amount + 3, 
author.name_author = '-'
WHERE book.book_id = 4 and author.id = 4;

Результат запроса в таблице book:

13

Результат запроса в таблице authors:

14

8. Обновление таблиц с объединением (INNER JOIN)

Во время обновления можно также объединять таблицы при помощи команды INNER JOIN.

UPDATE book b INNER JOIN author a 
ON b.author_id = a.id
SET b.title = CONCAT(b.title, ' (', a.name_author,')');

15

Указывать INNER необязательно, так как этот тип объединения используется по умолчанию. Запрос можно переписать следующим образом, и мы получим такой же результат:

UPDATE book, author a 
SET b.title = CONCAT(b.title, ' (', a.name_author,')')
WHERE b.author_id = a.id;

9. Обновление таблиц с объединением (LEFT JOIN)

Также мы можем использовать LEFT JOIN. В этом случае обязательно указывать, что мы используем именно левое объединение. Например, можно изменить на складе количество книг после их покупки. Добавим в таблицу sales две строки:

INSERT INTO sales (book_id, count, cost) 
VALUES (1, 3, (SELECT price FROM book WHERE book_id = 1)*3), 
(3, 1, (SELECT price FROM book WHERE book_id = 3)*1);

Магазин продал 3 книги Anna Karenina и 1 книгу Dead Souls. Выполним запрос: 

UPDATE book LEFT JOIN sales on book.book_id = sales.book_id
SET amount = amount - count
WHERE sales.book_id is not NULL;

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

16

Если мы попробуем не использовать LEFT JOIN, то получим ошибку «Out of range value for column ‘amount’ at row 3», т.к. amount не может быть отрицательным. Или, если добавить IGNORE, получим:

17

Как можно видеть в данном случае во всех строках количество уменьшилось на три книги, что нам не очень подходит.

10. Обновление с CASE, IF, IFNULL, COALESCE

При обновлении таблицы также возможно использовать условные операторы, такие как CASE, IF и т.д.

Функция CASE проверяет истинность набора условий и, в зависимости от результата, возвращает один из возможных результатов. Синтаксис при работе с UPDATE в MySQL для операторов CASE и WHEN будет следующий:

UPDATE book
SET price = 
  CASE genre_id
  WHEN 1 THEN 100
  WHEN 2 THEN 150
  ELSE price 
  END;

В данном случае, если книга имеет жанр 1 мы устанавливаем стоимость 100, если жанр 2 – стоимость 150.

Результат выполнения запроса:

18

Функция IF в зависимости от результата условного выражения возвращает одно из двух значений. Если книга имеет жанр 4, то мы уменьшаем ее стоимость на 200, иначе оставляем стоимость прежней:

UPDATE book
SET price = IF (genre_id = 4, price-200, price);

Результат выполнения запроса:

19

Функция IFNULL проверяет значение выражения – если оно имеет значение NULL, то возвращается определенное значение, в противном случае возвращается само выражение. Пусть одно из значений amount оказалось NULL:

20

Проверим все значения в столбце amount, и если встретится NULL, заменим его на 0: 

UPDATE book
SET amount = IFNULL(amount, 0);

Результат выполнения запроса:

21

Функция COALESCE довольна похожа на IFNULL. Основная особенность заключается в том, что данная функция может принимать сразу несколько значений (два и более). Как и IFNULL, возвращает первое не равное NULL.

Для того чтобы посмотреть, как работает этот вариант, создадим таблицу следующего вида:

22

И выполним запрос:

UPDATE test_table
SET col4 = COALESCE(col1, col2, col3, 'нет значения');

Результат выполнения запроса:

23

11. Обновление с сортировкой

Сортировка может помочь при обновлении поля с уникальным ключом. Если мы захотим сдвинуть наши id на 1, то, изменив первую строку, мы получим две строки, у которых id = 2, и возникнет ошибка. Но если добавить ORDER BY и начать обновлять с конца, то запрос успешно выполнится:

UPDATE book
SET book_id=book_id+1 

Результат выполнения запроса:

24

12. Обновление на основе данных из других таблиц

Также в MySQL при работе с UPDATE в условии WHERE возможно использовать вложенные команды SELECT и FROM. В рассматриваемом примере мы сначала получаем идентификатор жанра ‘Epic poetry’, а потом на основе полученного значения отбираем строки для обновления таблицы. 

UPDATE book
SET amount = 0
WHERE genre_id = (
   SELECT id
   FROM genre 
   Where name_genre = 'Epic poetry'
);

25

Как вариант, мы можем выбрать значения, которые нужно изменить, используя запрос: 

UPDATE book
SET price = (
SELECT MIN (cost)
FROM sales)
WHERE amount < 5;

Мы изменяем значения price всех книг, у которых количество на складе меньше 5, на минимальную сумму продажи. 

26

Минимальная сумма продаж у нас 480:

27

В этой ситуации невозможно обновить таблицу, выбрав значения из той же таблицы в подзапросе. Но есть вариант использовать небольшую хитрость – мы можем объединить таблицу с собой:

UPDATE book AS book_1
    INNER JOIN(
        SELECT genre_id, MIN(amount) AS min_amount
        FROM book
        GROUP BY genre_id
    ) AS book_2 ON book_1.genre_id = book_2.genre_id
SET book_1.amount = book_2.min_amount;

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

Подзапрос находит минимальное количество книг для каждого жанра, после чего используется для обновления столбца amount. В нашей таблице только у жанра 4 имеется больше одной строки. Значения в обеих строках должно замениться на минимальное для этого жанра – 4.

Результат выполнения запроса:

28

Есть еще один вариант обновления – использование SELECT FROM SELECT:

UPDATE book AS book_1
SET book_1.price = (SELECT MIN(price) AS min_price FROM (
SELECT price 
FROM book) as book_2);

В данном случае также создается временная таблица. Однако в этом случае присваивается только одно значение всем строкам.

Заключение

Мы постарались максимально подробно раскрыть особенности применения оператора UPDATE в MySQL. Но, конечно, практическое применение может продемонстрировать немало других интересных вариантов.

Редактирование записей в СУБД MySQL осуществляется при помощи команды UPDATE.

Исходные данные

Например есть таблица `news`, с несколькими записями.

Таблица news

Создаем таблицу.

CREATE TABLE `news` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`category_id` INT(10) UNSIGNED NULL DEFAULT NULL,
`text` TEXT NOT NULL,
`add_date` DATE NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE=’utf8_general_ci’
ENGINE=InnoDB;

Данные

Заполняем таблицу данными (Как добавить данные в таблицу MySQL).

id category_id text add_date
1 1 Самая первая новость 2013-11-10
2 3 Просто вторая новость 2013-11-13
3 3 Очень третья новость 2013-11-16
4 4 Четвертейшая новость 2013-11-19
5 2 Последняя новость 2013-11-21

UPDATE

Напишем два запроса на обновление данных.

Первый запрос: текст «Самая первая новость», у новости с id = 1, заменить на "The very first news"; Второй запрос: установить значение поля category_id = 2 у всех записей таблицы news.

UPDATE … WHERE

UPDATE `news`
SET `text` = ‘The very first news’
WHERE `id` = 1;

UPDATE всех записей

UPDATE `news`
SET `category_id` = 2;

После выполнения запросов, данные будут выглядеть так:

id category_id text add_date
1 2 The very first news 2013-11-10
2 2 Просто вторая новость 2013-11-13
3 2 Очень третья новость 2013-11-16
4 2 Четвертейшая новость 2013-11-19
5 2 Последняя новость 2013-11-21

Синтаксис UPDATE

Во время обновления записей можно указывать лимит, сортировку и условия.

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 …]
[WHERE where_definition]
[ORDER BY …]
[LIMIT rows]

Во время обновления записи можно охватить несколько таблиц (нельзя использовать сортировку и лимит).

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name …]
SET col_name1=expr1 [, col_name2=expr2 …]
[WHERE where_definition]

нет оценок

Категории

СУБДMySQL

Читайте также

  • Добавить запись в таблицу (MySQL)
  • Удалить запись из таблицы (MySQL)
  • Количество записей в таблице MySQL
  • Как узнать количество записей в дочерней таблице (MySQL)
  • Очистить таблицу (MySQL)
  • INSERT SELECT (MySQL)
  • Between date (MySQL)
  • Having count (MySQL)
  • Скопировать структуру таблицы (MySQL)
  • GROUP_CONCAT (MySQL)
  • Переименовать таблицу (MySQL)
  • Select like and char_length (MySQL)

Комментарии

Команда UPDATE

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

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

UPDATE table_name SET column1=new_value, column2=new_value WHERE condition;

Для примера заполним таблицу 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.

UPDATE books SET price=263.00, discount=10, amount=amount2 WHERE id=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% для всех книг под авторством Николая Гоголя, а также в название книги добавим слово «(Акция)».

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

UPDATE books SET discount=5, title=CONCAT(title,» (Акция)») WHERE author=«Николай Гоголь»;

В запросе используется функция 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.

UPDATE books SET price=103.90, title=«Барышня-крестьянка»;

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

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 и выведем данные, которые в ней хранятся, просто для того чтобы видеть, что содержит таблица и не редактировать ее вслепую.

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

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

<!DOCTYPE html>

<html>

<head>

    <meta charset=«UTF-8»>

    <title>UPDATE</title>

    <style>

        label{display: inline-block;width: 170px;}

        form > div{margin-bottom: 5px;}

        td:nth-child(5),td:nth-child(6){text-align:center;}

        table{border-spacing: 0;border-collapse: collapse;}

        td, th{padding: 10px;border: 1px solid black;}

    </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, amount FROM books LIMIT 5»;

    // Подготовка запроса

    $statement = $db->prepare($sql);

    // Выполняем запрос

    $statement->execute();

    // Получаем массив строк

    $result_array = $statement->fetchAll();

    echo «<table><tr><th>ID</th><th>Title</th><th>Author</th><th>Price</th><th>Discount</th><th>Amount</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>» . $result_row[«amount»]   . «</td>»;

        echo «</tr>»;

    }

    echo «</table>»;

}

catch(PDOException $e) {

    echo «Ошибка при создании записи в базе данных: « . $e->getMessage();

}

// Закрываем соединение

$db = null;

?>

    <h2>Команда UPDATE</h2>

    <form action=«update.php» method=«POST»>

        <div>

            <label for=«ID»>Выберите ID строки *:</label>

            <input type=«number» id=«ID» name=«book_id» required>

        </div>

        <div>

            <label for=«Title»>Название книги:</label>

            <input type=«text» id=«Title» name=«book_title»>

        </div>

        <div>

            <label for=«Author»>Имя автора:</label>

            <input type=«text» id=«Author» name=«book_author»>

        </div>

        <div>

            <label for=«Price»>Цена:</label>

            <input type=«number» id=«Price» name=«book_price»>

        </div>

        <div>

            <label for=«Discount»>Скидка:</label>

            <input type=«number» min=«0» max=«100» id=«Discount» name=«book_discount»>

        </div>

        <div>

            <label for=«Amount»>Количество:</label>

            <input type=«number» id=«Amount» name=«book_amount»>

        </div>

        <input type=«submit» value=«Обновить запись»>

    </form>

</body>

</html>

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

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

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

Далее нам понадобится файл update.php для составления и выполнения запроса на редактирование таблицы 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

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

<?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);

    // Переносим данные из полей формы в переменные.

    $book_id =       $_POST[‘book_id’];

    $book_title =    $_POST[‘book_title’];

    $book_author =   $_POST[‘book_author’];

    $book_price =    $_POST[‘book_price’];

    $book_discount = $_POST[‘book_discount’];

    $book_amount =   $_POST[‘book_amount’];

    // Если пользователь не указал (номер Id) какую запись будем редактировать,

    // то прерываем выполнение кода.

    if(empty($book_id)){

        echo «Вы не задали ID строки для обновления данных!»;

        return;

    }

    // Составвлям массив колонок для запроса обновления.

    // Если поле формы не пустое, то его значение будет добавлено в запрос.

    $update_columns = array();

    if(trim($book_title) !== «»)   { $update_columns[] = «title = :title»; }

    if(trim($book_author) !== «»)  { $update_columns[] = «author = :author»; }

    if(trim($book_price) !== «»)   { $update_columns[] = «price = :price»; }

    if(trim($book_discount) !== «»){ $update_columns[] = «discount = :discount»; }

    if(trim($book_amount) !== «»)  { $update_columns[] = «amount = :amount»; }

    // Если есть хоть одно заполненное поле формы,

    // то составляем запрос.    

    if(sizeof($update_columns > 0)){

        // Запрос на создание записи в таблице

        $sql = «UPDATE books SET « . implode(«, «, $update_columns) . » WHERE id=:id»;

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

        // echo $sql;

        // Например, если в форме заполнены поля: название, автор книги и номер Id=1,

        // то запрос должен выглядеть следующим образом:

        // «UPDATE books SET title = :title, author = :author WHERE id=:id»

        // Подготовка запроса.

        $statement = $db->prepare($sql);

        // Привязываем к псевдо переменным реальные данные,

        // если они существуют (пользователь заполнил поле в форме).        

        $statement->bindParam(«:id», $book_id);

        if(trim($book_title) !== «»){

            $statement->bindParam(«:title», $book_title);

        }

        if(trim($book_author) !== «»){

            $statement->bindParam(«:author», $book_author);

        }

        if(trim($book_price) !== «»){

            $statement->bindParam(«:price», $book_price);

        }

        if(trim($book_discount) !== «»){

            $statement->bindParam(«:discount», $book_discount);

        }

        if(trim($book_amount) !== «»){

            $statement->bindParam(«:amount», $book_amount);

        }

        // Выполняем запрос.

        $statement->execute();

        echo «Запись c ID: « . $book_id . » успешно обновлена!»;

    }

}

catch(PDOException $e) {

    echo «Ошибка при обновлении записи в базе данных: « . $e->getMessage();

}

// Закрываем соединение.

$db = null;

?>

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

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

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

Заключение

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

How can I change the data in only one cell of a mysql table.
I have problem with UPDATE because it makes all the parameters in a column change but I want only one changed. How?

viniciusmunich - AssabetTech's user avatar

asked Jun 11, 2010 at 16:39

kasrsf's user avatar

1

You probably need to specify which rows you want to update…

UPDATE 
    mytable
SET 
    column1 = value1,
    column2 = value2
WHERE 
    key_value = some_value;

radbyx's user avatar

radbyx

9,22220 gold badges82 silver badges124 bronze badges

answered Jun 11, 2010 at 16:42

Brian Hooper's user avatar

Brian HooperBrian Hooper

21.3k23 gold badges88 silver badges137 bronze badges

7

My answer is repeating what others have said before, but I thought I’d add an example, using MySQL, only because the previous answers were a little bit cryptic to me.

The general form of the command you need to use to update a single row’s column:

UPDATE my_table SET my_column='new value' WHERE something='some value';

And here’s an example.

BEFORE

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10104 | 
+------------+-------+
2 rows in set (0.00 sec)

MAKING THE CHANGE

mysql> update ae set port='10105' where aet='CDRECORD';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

AFTER

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10105 | 
+------------+-------+
2 rows in set (0.00 sec)

answered Feb 25, 2012 at 4:26

slm's user avatar

slmslm

14.9k12 gold badges106 silver badges120 bronze badges

2

UPDATE will change only the columns you specifically list.

UPDATE some_table
SET field1='Value 1'
WHERE primary_key = 7;

The WHERE clause limits which rows are updated. Generally you’d use this to identify your table’s primary key (or ID) value, so that you’re updating only one row.

The SET clause tells MySQL which columns to update. You can list as many or as few columns as you’d like. Any that you do not list will not get updated.

answered Jun 11, 2010 at 16:41

VoteyDisciple's user avatar

VoteyDiscipleVoteyDisciple

37k5 gold badges95 silver badges96 bronze badges

UPDATE only changes the values you specify:

UPDATE table SET cell='new_value' WHERE whatever='somevalue'

Maarten Wolfsen's user avatar

answered Jun 11, 2010 at 16:44

gruntled's user avatar

gruntledgruntled

2,63418 silver badges16 bronze badges

Try the following:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName

Maarten Wolfsen's user avatar

answered Jul 22, 2014 at 6:02

user3668628's user avatar

user3668628user3668628

1032 silver badges4 bronze badges

1

UPDATE TABLE <tablename> SET <COLUMN=VALUE> WHERE <CONDITION>

Example:

UPDATE TABLE teacher SET teacher_name='NSP' WHERE teacher_id='1'

answered Nov 7, 2017 at 6:03

NSP's user avatar

NSPNSP

1,1634 gold badges15 silver badges25 bronze badges

try this.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';

Petter Friberg's user avatar

answered May 2, 2017 at 7:43

abhay's user avatar

abhayabhay

311 bronze badge

1

Some of the columns in MySQL have an «on update» clause, see:

mysql> SHOW COLUMNS FROM your_table_name;

I’m not sure how to update this but will post an edit when I find out.

answered Mar 24, 2012 at 22:33

Jake_Howard's user avatar

Jake_HowardJake_Howard

2,4432 gold badges14 silver badges13 bronze badges

1

How can I change the data in only one cell of a mysql table.
I have problem with UPDATE because it makes all the parameters in a column change but I want only one changed. How?

viniciusmunich - AssabetTech's user avatar

asked Jun 11, 2010 at 16:39

kasrsf's user avatar

1

You probably need to specify which rows you want to update…

UPDATE 
    mytable
SET 
    column1 = value1,
    column2 = value2
WHERE 
    key_value = some_value;

radbyx's user avatar

radbyx

9,22220 gold badges82 silver badges124 bronze badges

answered Jun 11, 2010 at 16:42

Brian Hooper's user avatar

Brian HooperBrian Hooper

21.3k23 gold badges88 silver badges137 bronze badges

7

My answer is repeating what others have said before, but I thought I’d add an example, using MySQL, only because the previous answers were a little bit cryptic to me.

The general form of the command you need to use to update a single row’s column:

UPDATE my_table SET my_column='new value' WHERE something='some value';

And here’s an example.

BEFORE

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10104 | 
+------------+-------+
2 rows in set (0.00 sec)

MAKING THE CHANGE

mysql> update ae set port='10105' where aet='CDRECORD';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

AFTER

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10105 | 
+------------+-------+
2 rows in set (0.00 sec)

answered Feb 25, 2012 at 4:26

slm's user avatar

slmslm

14.9k12 gold badges106 silver badges120 bronze badges

2

UPDATE will change only the columns you specifically list.

UPDATE some_table
SET field1='Value 1'
WHERE primary_key = 7;

The WHERE clause limits which rows are updated. Generally you’d use this to identify your table’s primary key (or ID) value, so that you’re updating only one row.

The SET clause tells MySQL which columns to update. You can list as many or as few columns as you’d like. Any that you do not list will not get updated.

answered Jun 11, 2010 at 16:41

VoteyDisciple's user avatar

VoteyDiscipleVoteyDisciple

37k5 gold badges95 silver badges96 bronze badges

UPDATE only changes the values you specify:

UPDATE table SET cell='new_value' WHERE whatever='somevalue'

Maarten Wolfsen's user avatar

answered Jun 11, 2010 at 16:44

gruntled's user avatar

gruntledgruntled

2,63418 silver badges16 bronze badges

Try the following:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName

Maarten Wolfsen's user avatar

answered Jul 22, 2014 at 6:02

user3668628's user avatar

user3668628user3668628

1032 silver badges4 bronze badges

1

UPDATE TABLE <tablename> SET <COLUMN=VALUE> WHERE <CONDITION>

Example:

UPDATE TABLE teacher SET teacher_name='NSP' WHERE teacher_id='1'

answered Nov 7, 2017 at 6:03

NSP's user avatar

NSPNSP

1,1634 gold badges15 silver badges25 bronze badges

try this.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';

Petter Friberg's user avatar

answered May 2, 2017 at 7:43

abhay's user avatar

abhayabhay

311 bronze badge

1

Some of the columns in MySQL have an «on update» clause, see:

mysql> SHOW COLUMNS FROM your_table_name;

I’m not sure how to update this but will post an edit when I find out.

answered Mar 24, 2012 at 22:33

Jake_Howard's user avatar

Jake_HowardJake_Howard

2,4432 gold badges14 silver badges13 bronze badges

1

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить строй на гитаре тюнером
  • Как изменить строение черепа
  • Как изменить строение лица
  • Как изменить стрижку каскад на другую стрижку
  • Как изменить стрижку каре на каскад

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии