Поиск…


Синтаксис

  • 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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow