MySQL
ОБНОВИТЬ
Поиск…
Синтаксис
UPDATE [LOW_PRIORITY] [IGNORE] tableName SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Простое обновление одной таблицы
UPDATE [LOW_PRIORITY] [IGNORE] tableName SET column1 = expression1, column2 = expression2, ... [WHERE conditions] [ORDER BY expression [ASC | DESC]] [LIMIT row_count]; // Обновление с порядком и ограничением
UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Обновление нескольких таблиц
Основное обновление
Обновление одной строки
UPDATE customers SET email='[email protected]' WHERE id=1
Этот запрос обновляет содержимое email
в таблице customers
в строке [email protected]
где значение id
равно 1. Старое и новое содержимое таблицы базы данных проиллюстрировано ниже слева и справа соответственно:
Обновление всех строк
UPDATE customers SET lastname='smith'
Этот запрос обновляет содержимое lastname
для каждой записи в таблице customers
. Старое и новое содержимое таблицы базы данных показано ниже слева и справа соответственно:
Примечание. В запросе UPDATE необходимо использовать условные предложения (WHERE). Если вы не используете условное предложение, все записи атрибута этой таблицы будут обновлены. В приведенном выше примере новое значение (Смит) последнего имени в таблице клиентов установлено для всех строк.
Обновление с помощью шаблона объединения
Рассмотрим производственную таблицу под названием questions_mysql
и таблицу iwtQuestions
(импортированную iwtQuestions
таблицу), представляющую последнюю партию импортированных данных CSV из LOAD DATA INFILE
. Рабочий стол усекается перед импортом, данные импортируются, и этот процесс здесь не показан.
Обновите наши производственные данные, используя соединение с импортированными данными рабочей таблицы.
UPDATE questions_mysql q -- our real table for production
join iwtQuestions i -- imported worktable
ON i.qId = q.qId
SET q.closeVotes = i.closeVotes,
q.votes = i.votes,
q.answers = i.answers,
q.views = i.views;
Псевдонимы q
и i
используются для сокращения ссылок на таблицы. Это облегчает разработку и удобочитаемость.
qId
, первичный ключ, представляет собой идентификатор вопроса Stackoverflow. Четыре столбца обновляются для сопоставления строк из соединения.
UPDATE с ORDER BY и LIMIT
Если предложение ORDER BY
указано в вашем заявлении SQL SQL, строки обновляются в указанном порядке.
Если предложение LIMIT
указано в вашем операторе SQL, это ограничивает количество строк, которые могут быть обновлены. Нет предела, если предложение LIMIT
не указано.
ORDER BY
и LIMIT
не могут использоваться для обновления нескольких таблиц.
Синтаксис для MySQL UPDATE
с ORDER BY
и LIMIT
- это,
UPDATE [ LOW_PRIORITY ] [ IGNORE ]
tableName
SET column1 = expression1,
column2 = expression2,
...
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT row_count];
---> Example
UPDATE employees SET isConfirmed=1 ORDER BY joiningDate LIMIT 10
В приведенном выше примере 10 строк будут обновляться в соответствии с порядком сотрудников joiningDate
.
Несколько таблиц UPDATE
В нескольких таблицах UPDATE
он обновляет строки в каждой указанной таблице, которые удовлетворяют условиям. Каждая соответствующая строка обновляется один раз, даже если она соответствует условиям несколько раз.
В нескольких таблицах UPDATE
, ORDER BY
и LIMIT
не могут использоваться.
Синтаксис для нескольких таблиц UPDATE
,
UPDATE [LOW_PRIORITY] [IGNORE]
table1, table2, ...
SET column1 = expression1,
column2 = expression2,
...
[WHERE conditions]
Например, рассмотрим две таблицы, products
и salesOrders
. В случае, если мы уменьшим количество конкретного продукта из уже заказанного заказа клиента. Затем нам также необходимо увеличить это количество в нашем столбце запасов таблицы products
. Это можно сделать в одном операторе обновления SQL, как показано ниже.
UPDATE products, salesOrders
SET salesOrders.Quantity = salesOrders.Quantity - 5,
products.availableStock = products.availableStock + 5
WHERE products.productId = salesOrders.productId
AND salesOrders.orderId = 100 AND salesOrders.productId = 20;
В приведенном выше примере количество «5» будет уменьшено из таблицы salesOrders
и то же самое будет увеличено в таблице products
соответствии с условиями WHERE
.
Массовое ОБНОВЛЕНИЕ
При обновлении нескольких строк с разными значениями гораздо быстрее использовать массовое обновление.
UPDATE people
SET name =
(CASE id WHEN 1 THEN 'Karl'
WHEN 2 THEN 'Tom'
WHEN 3 THEN 'Mary'
END)
WHERE id IN (1,2,3);
При массовом обновлении только один запрос может быть отправлен на сервер вместо одного запроса для каждой обновляемой строки. Случаи должны содержать все возможные параметры, рассмотренные в WHERE
.