Запрос sql update: Оператор SQL UPDATE: примеры, синтаксис

Содержание

Оператор SQL UPDATE: примеры, синтаксис

Оператор SQL UPDATE используется для изменения значений в записях таблицы.

Оператор SQL UPDATE имеет следующий синтаксис:

UPDATE table_name SET expression [WHERE condition]

Напоминаю, что записи в квадратных скобках [] являются необязательными.

После ключевого слова SET должен идти список столбцов таблицы, которые следует изменить, и новые значения в формате Имя_столбца = значение.

Дополнительное условие, описываемое в операторе SQL WHERE, помогает более гибко совершать манипуляции данными.


Примеры оператора SQL UPDATEИмеется следующая таблица Planets:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
1Mars33966871659NoChristiaan Huygens
2Saturn6026810759.22Yes
3Neptune24764601901846YesJohn Couch Adams
4Mercury2439115.881631NoNicolaus Copernicus
5Venus60512431610NoGalileo Galilei

Пример 1. С помощью оператора SQL UPDATE изменить название планеты Neptune на Pluton:

UPDATE Planets
SET PlanetName = 'Pluton'
WHERE ID = 3

В этом примере условие оператора SQL WHERE является обязательным, так как без него все поля столбца PlanetName во всей таблице изменились бы на Pluton. В данном случае, нам приходит на помощь столбец ID, ибо он является Первичным ключом, позволяющим однозначно идентифицировать запись.

Выполним запрос оператором SQL SELECT, чтобы посмотреть изменения в записи:

SELECT *
FROM Planets
WHERE ID = 3

Результат:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
3Pluton24764601901846YesJohn Couch Adams

Пример 2. С помощью оператора SQL UPDATE у первых трех записей таблицы изменить значение наличия колец (HavingRings) на «No» и обнулить поле ID

Код примера для MS SQL Server:

UPDATE TOP(3) Planets
SET HavingRings = 'No', ID = NULL

Код примера для MySQL:

UPDATE Planets
SET HavingRings = 'No', ID = NULL
LIMIT 3

Выполним проверку:

SELECT TOP(3) *
FROM Planets

Результат:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
NULLMars33966871659NoChristiaan Huygens
NULLSaturn6026810759.22No
NULLNeptune24764601901846NoJohn Couch Adams

Запросы SQL для обновления данных (UPDATE)

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

В SQL, изменить запись в таблице БД можно с помощью команды UPDATE. В самом минимальном виде команда обновления данных выглядит следующим образом:

UPDATE таблица SET поле = значение

Здесь, UPDATE – команда указывающая, что запрос на обновление данных;

таблица – название таблицы, в которой будет проводиться изменения;

SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;

поле – поле таблицы, в которое будет внесено изменение;

значение – новое значение, которое будет внесено в поле.

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

UPDATE goods SET price = 0

В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.

Изменение одного значения

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

Имеется таблица:






num
(номер товара)
title
(название)
price
(цена)
1Чайник300
2Чашка100
3Ложка25
4Тарелка100

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

UPDATE goods SET price = 150 WHERE num = 2

Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.

Внесение изменений в несколько строк с условием отбора

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

Например, мы хотим уменьшить в два раза цену всех товаров, которые сейчас стоят от 100 и более. Запрос:

UPDATE goods SET price = price / 2 WHERE price >= 100

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

price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.

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






num
(номер товара)
title
(название)
price
(цена)
1Чайник150
2Чашка50
3Ложка25
4Тарелка50

Обновление значений в нескольких полях строки

При необходимости обновлять сразу несколько полей, все поля с их значениями указываются после директивы SET через запятую. Например, нужно изменить название и цену товара с кодом 2 на «утюг», стоимостью 300:

UPDATE goods SET title = "утюг", price = 300 WHERE num = 2

Такой запрос каждому соответствующему полю в строке назначит его значение. А условие укажет, в какой именно строке будут выполнены изменения.

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

Команда UPDATE — редактирование записей в базе данных

Команда UPDATE редактирует записи в базе данных.

Какие записи для редактирования
задаются с помощью команды WHERE.

Команда WHERE не является обязательной, если ее не указать —
будут обновлены все записи в таблице. Будьте внимательны — так случайно можно
уничтожить все данные.

См. также команды
SELECT,
INSERT,
DELETE,
которые отвечают за получение, вставку и удаление записей.

Синтаксис

UPDATE имя_таблицы SET поле1=значение1, поле2=значение2, поле3=значение3...
	WHERE условие_по_которому_следует_выбрать_строки

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима23400
2Петя24500
3Вася25600

Пример

В данном примере работнику с id, равным 1 (то есть Диме), устанавливается возраст 30
и зарплата 1000:

UPDATE workers SET age=30, salary=1000 WHERE id=1

Таблица workers станет выглядеть так:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима301000
2Петя24500
3Вася25600

Пример

В данном примере работнику с id, равным 1 (то есть Диме), устанавливается возраст 30:

UPDATE workers SET age=30 WHERE id=1

Таблица workers станет выглядеть так:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима30400
2Петя24500
3Вася25600

Пример

В данном примере работнику Пете устанавливается новое имя Коля:

UPDATE workers SET name='Коля' WHERE name='Петя'

Таблица workers станет выглядеть так:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима23400
2Коля24500
3Вася25600

Пример

В данном примере всем работникам устанавливается зарплата 1000
(так как не задано WHERE — наш запрос обновит все записи):

UPDATE workers SET salary=1000

Таблица workers станет выглядеть так:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима231000
2Петя241000
3Вася251000

SQL — Запрос UPDATE

Запрос UPDATE используется для изменения существующих записей в таблице.

Вы можете использовать WHERE с запросом UPDATE, чтобы обновить выбранные строки, в противном случае будут затронуты все строки.

Синтаксис:

Базовый синтаксис запроса UPDATE с WHERE выглядит следующим образом:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

 

Вы можете объединить N число условий с помощью операторов AND или OR.

Пример:

Рассмотрим таблицу клиентов, имеющих следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Ниже приведен пример, который будет обновлять ADDRESS для клиента с идентификатором 6:

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Rostov'
WHERE ID = 6;

 

Теперь таблица CUSTOMERS будет иметь следующую информацию:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | Rostov    | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Если вы хотите изменить все значения ADDRESS и столбцов SALARY в таблице CUSTOMERS, вам не нужно использовать WHERE, и запрос UPDATE будет выглядеть следующим образом:

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Rostov', SALARY = 25000.00;

 

Теперь таблица CUSTOMERS будет иметь следующие документы:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Rostov    | 25000.00 |
|  2 | AndreyEx |  38 | Rostov    | 25000.00 |
|  3 | Oleg     |  33 | Rostov    | 25000.00 |
|  4 | Masha    |  35 | Rostov    | 25000.00 |
|  5 | Ruslan   |  34 | Rostov    | 25000.00 |
|  6 | Dima     |  32 | Rostov    | 25000.00 |
|  7 | Roma     |  34 | Rostov    | 25000.00 |
+----+----------+-----+-----------+----------+

Более подробные примеры можно посмотреть в гиде: 11 основных примеров команды UPDATE в MySQL.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

11 основных примеров команды UPDATE в MySQL

Одной из наиболее распространенных операций в MySQL является изменение существующего значения записи в таблице.

В этой статье мы расскажем, как использовать команду UPDATE в MySQL вместе с некоторыми полезными примерами.

Рассматриваются в данном руководстве следующие примеры:

  1. Обновление всех строк
  2. Обновление только выбранных строк
  3. Обновление значение столбца с выражением
  4. Использование ключевого слова DEFAULT в Update
  5. Обновление нескольких столбцов
  6. Используя условие LIMIT в обновлении
  7. Множественное обновление таблиц (с помощью Inner Join)
  8. Множественное обновление таблиц (с помощью Left Join)
  9. Возврат обновленного значения (или Pre-Update Value)
  10. Случай объединения или IF с Update
  11. Зачем использовать ORDER BY с Update?

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

mysql> DESC worker;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | YES  |     | NULL    |                |
| dept   | varchar(10) | YES  |     | Sales   |                |
| salary | int(10)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

 

В настоящее время таблица worker имеет следующие записи.

mysql> SELECT * FROM worker;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Andrey | Sales      |   5000 |
| 200 | Anton  | IT         |   5500 |
| 300 | Maxim  | IT         |   7000 |
| 400 | Dimon  | Marketing  |   9500 |
| 500 | Anton  | IT         |   6000 |
| 501 | Anna   | Accounting |   NULL |
+-----+--------+------------+--------+

 

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

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

В следующем простом примере, команда UPDATE будет установлено значение столбца DEPT к IT для всех строк в таблице worker.

mysql> UPDATE worker SET dept='IT        ';
Query OK, 3 rows affected (0.02 sec)
Rows matched: 6  Changed: 3  Warnings: 0

 

Вывод команды UPDATE будет иметь следующие две строки:

  • Строка 1:  “Query OK”, если запрос был выполнен. Если есть ошибка синтаксиса, он будет отображать его здесь. Даже если она не обновляла какие-либо записи, эта строка будет по-прежнему говорить “Query OK”, пока не было никаких ошибок синтаксиса и утверждение было чистым. Эта линия также покажет, сколько записей были обновлены по этому запросу (например: 3 rows affected). И, наконец, это также покажет, сколько времени потребовалось для MySQL для выполнения запроса (например: 0,02 секунды).
  • Строка 2: Скажет, сколько записей, согласованы условием утверждения обновлений. В этом примере нет WHERE условие, нет ограничений на количество записей, которые следует учитывать для обновления (так, он говорит: Rows matched: 6). Далее, покажет, сколько записей действительно были обновлены (например: Changed: 3). Наконец, он покажет, как много предупреждений там, во время обновления. Довольно много в большинстве случаев, вы увидите предупреждения как 0, когда все работало правильно.

Вот обновленные записи после вышеуказанной команды UPDATE.

mysql> SELECT * FROM worker;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Andrey | IT         |   5000 |
| 200 | Anton  | IT         |   5500 |
| 300 | Maxim  | IT         |   7000 |
| 400 | Dimon  | IT         |   9500 |
| 500 | Anton  | IT         |   6000 |
| 501 | Anna   | IT         |   NULL |
+-----+--------+------------+--------+

 

2. Обновление только выбранных строк

Вместо того, чтобы обновить все записи, вы можете выборочно обновить определенные записи на основе условия WHERE.

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

mysql> UPDATE worker SET dept='Marketing' WHERE salary >=7000;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

 

Были только две записи, которые соответствовали выше, таблица обновилась, как показано ниже.

mysql> SELECT * FROM worker;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Andrey | IT         |   5000 |
| 200 | Anton  | IT         |   5500 |
| 300 | Maxim  | Marketing  |   7000 |
| 400 | Dimon  | Marketing  |   9500 |
| 500 | Anton  | IT         |   6000 |
| 501 | Anna   | IT         |   NULL |
+-----+--------+------------+--------+

 

Мы обсуждали много различных практических условий WHERE в нашем учебнике MySQL по команде SELECT. Это очень полезно, чтобы понять, как использовать предложение WHERE эффективно во время UPDATE: 25 основных примеров в MySQL для команды SELECT.

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

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

Ниже приводится очень простое выражение, где оно увеличивает значение заработной платы на 500 для всех сотрудников отдела IT.

mysql> UPDATE worker SET salary=salary+500 WHERE dept='IT';
Query OK, 3 rows affected (0.01 sec)
Rows matched: 4  Changed: 3  Warnings: 0

 

Были только 4 записи, которые соответствовали условию выше. Но только три записи были обновлены, как показано ниже, в качестве одного из записей сотрудников, который принадлежит к техническому отделу, имел нулевое значение в поле заработной платы. Таким образом, зарплата выше + 500 выражение по прежнему NULL, и не обновляется эта конкретную запись.

mysql> SELECT * FROM worker;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Andrey | IT         |   5500 |
| 200 | Anton  | IT         |   6000 |
| 300 | Maxim  | Marketing  |   7000 |
| 400 | Dimon  | Marketing  |   9500 |
| 500 | Anton  | IT         |   6500 |
| 501 | Anna   | IT         |   NULL |
+-----+--------+------------+--------+

 

4. Использование ключевого слова

DEFAULT в Update

Вместо того, чтобы указать статическое значение или выражение, вы также можете использовать ключевое слово “DEFAULT”, когда вы присваиваете значение столбца после SET.

Если вы посмотрите на вывод “DESC worker”, показанного ниже, вы увидите, что столбец с именем по умолчанию. Как вы видите там, зарплата имеет значение по умолчанию NULL. Отдел имеет значение по умолчанию продаж.

mysql> DESC worker;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | YES  |     | NULL    |                |
| dept   | varchar(10) | YES  |     | Sales   |                |
| salary | int(10)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

 

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

mysql> UPDATE worker SET salary=DEFAULT;
Query OK, 5 rows affected (0.03 sec)
Rows matched: 6  Changed: 5  Warnings: 0

 

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

mysql> UPDATE worker SET dept=DEFAULT;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

 

Как видно из следующих выходных данных, мы можем видеть, что ключевое слово DEFAULT взял соответствующие значения по умолчанию из определения таблицы сотрудников, и использовали их, чтобы обновить его. Колонка Департамент получил обновление до продаж и зарплата обновлена до NULL, как показано ниже.

mysql> SELECT * FROM worker;
+-----+--------+-------+--------+
| id  | name   | dept  | salary |
+-----+--------+-------+--------+
| 100 | Andrey | Sales |   NULL |
| 200 | Anton  | Sales |   NULL |
| 300 | Maxim  | Sales |   NULL |
| 400 | Dimon  | Sales |   NULL |
| 500 | Anton  | Sales |   NULL |
| 501 | Anna   | Sales |   NULL |
+-----+--------+-------+--------+

 

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

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

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

mysql> UPDATE worker SET salary=5000, dept='Marketing' WHERE id > 300;
Query OK, 3 rows affected (0.04 sec)
Rows matched: 3  Changed: 3  Warnings: 0

 

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

mysql> SELECT * FROM worker;
+-----+--------+-----------+--------+
| id  | name   | dept      | salary |
+-----+--------+-----------+--------+
| 100 | Andrey | Sales     |   NULL |
| 200 | Anton  | Sales     |   NULL |
| 300 | Maxim  | Sales     |   NULL |
| 400 | Dimon  | Marketing |   5000 |
| 500 | Anton  | Marketing |   5000 |
| 501 | Anna   | Marketing |   5000 |
+-----+--------+-----------+--------+

 

Кроме того, помимо получения хорошую статьи на команде UPDATE в MySQL, очень полезно, чтобы понять все доступные операции MySQL INSERT: 12 основных примеров в MySQL для команды INSERT.

6. Ограничение колличества записей при обновлении

Мы также можем использовать опцию LIMIT, чтобы ограничить количество записей, которые должны быть обновлены.

Даже если условие, где соответствует несколько записей, оператор обновления будет обновлять только 1-е X количество записей, указанных в значении LIMIT.

В следующем примере мы присваиваем зарплату всех записей до 6500, так как мы не имеем WHERE. Но, мы используем LIMIT 3. Это означает, что она будет обновлять зарплату только первым трем записям для условия согласования.

mysql> UPDATE worker SET salary=6500 LIMIT 3;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0

 

Как видно из следующего выхода, только 1-е три записи обновляются предыдущей командой.

mysql> SELECT * FROM worker;
+-----+--------+-----------+--------+
| id  | name   | dept      | salary |
+-----+--------+-----------+--------+
| 100 | Andrey | Sales     |   6500 |
| 200 | Anton  | Sales     |   6500 |
| 300 | Maxim  | Sales     |   6500 |
| 400 | Dimon  | Marketing |   5000 |
| 500 | Anton  | Marketing |   5000 |
| 501 | Anna   | Marketing |   5000 |
+-----+--------+-----------+--------+

 

Одна вещь, чтобы иметь в виду, что LIMIT 3 на самом деле не означает, что обновление будет продолжать идти, пока он не обновит 3 записей. Вместо этого оператор обновления прекратит выполнение, как только он обработал первые 3 строки, которые соответствовали условию выполнения, независимо от того, были ли действительно обновлены эти записи или нет.

7. Многократное обновление таблиц (с помощью Inner Join)

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

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

mysql> SELECT * from benefits;
+------------+-------+
| dept       | bonus |
+------------+-------+
| Sales      |  1000 |
| IT         |  NULL |
| Marketing  |   800 |
+------------+-------+

 

Следующее утверждение обновление будет увеличивать значение столбца заработной платы из таблицы сотрудников к значению, указанному в таблице льгот для соответствующего столбца DEPT.

Это означает, что мы должны объединить оба работника и таблицу преимущества во время обновления, как показано ниже. Используйте общее поле между этими двумя таблицами в предложении WHERE. В этом примере общее поле dept.

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

mysql> UPDATE worker,benefits 
    -> SET worker.salary=worker.salary+benefits.bonus 
    -> WHERE worker.dept=benefits.dept and benefits.bonus is not null;
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

 

Обратите внимание, что в приведенном выше обновлении, мы используем внутреннее соединение.

Ниже приведен вывод после того, как приведенное выше утверждение обновление было выполнено. Как вы видите ниже, зарплата работника получила увеличивается на основе значений из таблицы выгоды.

mysql> SELECT * FROM worker;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Andrey | Sales      |   7500 |
| 200 | Anton  | Sales      |   7500 |
| 300 | Maxim  | IT         |   6500 |
| 400 | Dimon  | IT         |   5000 |
| 500 | Anton  | Marketing  |   5800 |
| 501 | Anna   | Marketing  |   5800 |
+-----+--------+------------+--------+

 

8. Множественное обновление таблиц (с помощью Left Join)

Аналогично предыдущему примеру внутреннего соединения, мы можем также использовать левое соединение.

Когда мы используем внутреннее соединение, мы не указываем ключевое слово “inner join”, так как это по умолчанию при объединении нескольких таблиц.

Однако при использовании соединения слева мы должны явно указать “left join”, как показано ниже.

mysql> UPDATE worker LEFT JOIN benefits on worker.dept = benefits.dept
    -> SET worker.salary = worker.salary+500 
    -> WHERE benefits.bonus is null;
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2  Changed: 2  Warnings: 0

 

Вот выход после вышеуказанного обновления.

mysql> SELECT * FROM worker;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Andrey | Sales      |   7500 |
| 200 | Anton  | Sales      |   7500 |
| 300 | Maxim  | IT         |   7000 |
| 400 | Dimon  | IT         |   5500 |
| 500 | Anton  | Marketing  |   5800 |
| 501 | Anna   | Marketing  |   5800 |
+-----+--------+------------+--------+

 

9. Возврат обновленного значения (или Pre-Update Value)

В MySQL в команде обновления, нет никакого прямого способа получения нового значения обновлений.

Например, в PostgreSQL, мы можем использовать что-то вроде этого: “UPDATE table_name SET column_name = expression WHERE condition RETURNING column_name”. В MySQL, мы не имеем возвращения как часть команды обновления MySQL.

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

mysql> UPDATE worker SET salary = salary+500 WHERE id=400;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT salary AS tmp_salary FROM worker WHERE id=400;
+------------+
| tmp_salary |
+------------+
|       5500 |
+------------+

 

В приведенном выше примере, после того, как обновление будет сделано, переменная tmp_salary имеет обновленную зарплату от идентификатора сотрудника

Если вы хотите получить значение зарплаты, прежде чем обновление было сделано, очевидно, вы просто должны переключить последовательность из двух вышеупомянутых утверждений. В этом случае будет сначала SELECT, а затем UPDATE.

Или, вы можете использовать “@” в качестве части заявления UPDATE и получить предварительно обновленное значение, как показано ниже.

UPDATE worker SET salary = salary+500 WHERE id=400 
  AND @tmp_salary := salary

 

В приведенной выше команде обновления, после того, как обновление будет сделано, переменная tmp_salary имеет предварительно обновляемую зарплату для сотрудников ID 400. Как вы видите здесь, хотя значение заработной платы уже обновлено до 6000. Переменная tmp_salary, которая использовалась в приведенной выше команде UPDATE по-прежнему имеет значение 5500.

mysql> SELECT * FROM worker WHERE id = 400;
+-----+-------+------------+--------+
| id  | name  | dept       | salary |
+-----+-------+------------+--------+
| 400 | Dimon | IT         |   6000 |
+-----+-------+------------+--------+

mysql> SELECT @tmp_salary;
+-------------+
| @tmp_salary |
+-------------+
|        5500 |
+-------------+

 

10. Случай объединения или IF с Update

Вы также можете использовать условные обновления MySQL с помощью условных команд, как CASE, IF и т.д. Это полезно для упрощения обновления.

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

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

UPDATE worker SET salary = salary+1000 WHERE dept = 'Sales';
UPDATE worker SET salary = salary+500 WHERE dept = 'IT        ';
UPDATE worker SET salary = salary+800 WHERE dept = 'Marketing';

 

Вы можете объединить все перечисленные выше заявления трех UPDATE в одном заявлении UPDATE используя условие CASE, как показано ниже.

UPDATE worker SET salary = 
  CASE dept
   WHEN 'Sales' THEN salary+1000
   WHEN 'IT        ' THEN salary+500
   WHEN 'Marketing' THEN salary+500
   ELSE salary 
  END;

 

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

11. Зачем использовать ORDER с пунктом Update?

Вы можете использовать значение ORDER BY во время обновления. Предложения ORDER BY, безусловно, имеет смысл во время SELECT. Но, зачем нам нужен ORDER BY во время обновления.

Скажем, у вас есть уникальный идентификатор и поле идентификатор сотрудника таблицы.

Когда вы выполните следующую команду, чтобы увеличить идентификатор сотрудника на 100, вы можете получить сообщение об ошибке дубликатом.

mysql> UPDATE contractor set id=id+100;
ERROR 1062 (23000): Duplicate entry '200' for key 'PRIMARY'

 

Это происходит потому, что, когда он пытается обновить значение идентификатора от 100 до 200, то уже есть существующая запись с идентификатором, как 200. Поле ID также имеет уникальный UNIQUE, в данном случае это является PRIMARY ключом. Таким образом, мы получаем вышеуказанную ошибку.

Для этого мы должны выполнить следующую команду с ORDER BY с идентификатором Desc.

mysql> UPDATE worker SET id=id+100 order by id desc;
Query OK, 6 rows affected (0.01 sec)
Rows matched: 7  Changed: 7  Warnings: 0

 

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Изменение записей в таблице с помощью запроса update SQL: синтаксис и пример

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

Синтаксис

Основной синтаксис запроса UPDATE с условием WHERE выглядит следующим образом:

UPDATE имя_таблицы
SET столбец1 = значение1, столбец2 = значение2…., столбецN = значениеN
WHERE [условие];

UPDATE имя_таблицы

SET столбец1 = значение1, столбец2 = значение2…., столбецN = значениеN

WHERE [условие];

Вы можете комбинировать N-ное количество условий с помощью операторов AND или OR.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Пример

Рассмотрим таблицу CUSTOMERS, содержащую следующие записи:

Следующий запрос обновляет поле ADDRESS для клиента, чей идентификатор в таблице равен 6.

UPDATE CUSTOMERS
SET ADDRESS = ‘Pune’
WHERE ID = 6;

UPDATE CUSTOMERS

SET ADDRESS = ‘Pune’

WHERE ID = 6;

Теперь таблица CUSTOMERS будет содержать следующие записи:

Если вы хотите изменить все значения столбца ADDRESS и SALARY в таблице CUSTOMERS, вам не нужно использовать условие WHERE, просто запроса UPDATE будет достаточно, как показано в следующем блоке кода.

UPDATE CUSTOMERS
SET ADDRESS = ‘Pune’, SALARY = 1000.00;

UPDATE CUSTOMERS

SET ADDRESS = ‘Pune’, SALARY = 1000.00;

Теперь таблица CUSTOMERS будет содержать следующие записи:

Источник: //www.tutorialspoint.com/

Редакция: Команда webformyself.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Хотите изучить MySQL?

Посмотрите курс по базе данных MySQL!

Смотреть

Команда SQL для удаления и обновление данных в базе (DELETE, UPDATE)

В базу данных можно не только добавлять данные, но и удалять их оттуда. Ещё существует возможность обновить данные в базе. Рассмотрим оба случая.

Удаление данных из базы (DELETE)

Удаление из базы данных происходит с помощью команды «DELETE» (переводится с английского как «УДАЛИТЬ»). Функция удаляет не одну строку, а несколько, при этом выбирает для удаления строки по логике функции «SELECT». То есть чтобы удалить данные из базы, необходимо точно определить их. Приведём пример SQL команды для удаления одной строчки:

DELETE FROM `USERS` WHERE `ID` = 2 LIMIT 1;

Благодаря этому запросу из таблицы «USERS» будет удалена одна запись, у которой в столбце «ID» стоит значение «2».


Обратите внимание, что в конце запроса стоит лимит на выборку «LIMIT 1;» размером в 1 строку. Его можно было не ставить, если поле «ID» является «PRIMARY KEY» (первичный ключ, то есть содержит только уникальные значения). Но всё-таки рекомендуем ставить ограничение «LIMIT 1;» в любом случае, если вы намерены удалить только одну строчку.

Теперь попробуем удалить сразу диапазон данных. Для этого достаточно составить запрос, в результате выполнения которого вернётся несколько строк. Все эти строки будут удалены:

DELETE FROM `USERS` WHERE `ID` >= 5;

Этот запрос удалит все строки в таблицы, у которых в столбце «ID» стоит значение меньше 5. Если не поставить никакого условия «WHERE» и лимита «LIMIT», то будут удалены абсолютно все строки в таблице:

DELETE FROM `USERS`;


На некоторых версиях MySQL способ удаления всех строк через «DELETE FROM _;» может работать медленнее, чем «TRUNCATE _;«; Поэтому для очистки всей таблицы лучше всё-таки использовать «TRUNCATE».

Обновление данных в базе (UPDATE)

Функция обновления «UPDATE» (переводится с английского как «ОБНОВИТЬ») довольно часто используется в проектах сайтов. Как и в случае с функцией «DELETE», фкнция обновления не успокоится до тех пор, пока не обновит все поля, которые подходят под условия, если нет лимита на выборку. Поэтому необходимо задавать однозначные условия, чтобы вместо одной строки нечаянно не обновить половину таблицы. Приведём пример использования команды «UPDATE»:

UPDATE `USERS` SET `NAME` = 'Мышь' WHERE `ID` = 3 LIMIT 1;

В этом примере, в таблие «USERS» будет установлено значение «Мышь» в столбец «NAME» у строки, в столбце «ID» которой стоит значение «3». Можно обновить сразу несколько столбцов у одной записи, передав значения через запятую. Попробуем обновить не только значение с толбце «NAME», но и значение в столбце «FOOD» используя один запрос:

UPDATE `USERS` SET `NAME` = 'Мышь', `FOOD` = 'Сыр' WHERE `ID` = 3 LIMIT 1;

Если не поставить никаких лимитов LIMIT и условий WHERE, то все записи таблицы будут обновлены без исключений.

SQL | Оператор UPDATE — GeeksforGeeks

Оператор UPDATE в SQL используется для обновления данных существующей таблицы в базе данных. Мы можем обновлять отдельные столбцы, а также несколько столбцов, используя оператор UPDATE в соответствии с нашим требованием.

Базовый синтаксис

  UPDATE имя_таблицы SET column1 = value1, column2 = value2, ...
ГДЕ условие;
  
table_name:  имя таблицы
  column1 : имя первого, второго, третьего столбца....
  значение1 : новое значение для первого, второго, третьего столбца ....
  условие : условие выбора строк, для которых
значения столбцов необходимо обновить. 

ПРИМЕЧАНИЕ: В приведенном выше запросе оператор SET используется для установки новых значений в конкретный столбец, а предложение WHERE используется для выбора строк, столбцы которых необходимо обновить. Если мы не использовали предложение WHERE, тогда столбцы в всех строк будут обновлены.Таким образом, предложение WHERE используется для выбора конкретных строк.

Примеры запросов

    • Обновление одного столбца : Обновите ИМЯ столбца и установите значение «PRATIK» во всех строках, где возраст равен 20.
       UPDATE Student SET NAME = «PRATIK» WHERE Age = 20;
       

      Выход:
      Этот запрос обновит две строки (третья строка и пятая строка), и таблица Student теперь будет выглядеть так:

      XXX54

      ROLL_NO NAME ADDRESS ТЕЛЕФОН Возраст
      1 RAM Delhi XXXXXXXXXX 18
      2 RAMESXX GURGAON
      3 PRATIK ROHTAK XXXXXXXXXX 20
      4 SURESH Дели XXXXXXXXXX 18
      3 ROHTAK

      ROHTAX 900XXXXXXX
      2 РАМЕШ ГУРГАОН XXXXXXX XXX 18
    • Обновление нескольких столбцов: Обновите ИМЯ столбца на «PRATIK» и АДРЕС на «SIKKIM», где ROLL_NO равно 1.
       ОБНОВЛЕНИЕ НАБОР учеников NAME = 'PRATIK', ADDRESS = 'SIKKIM' WHERE ROLL_NO = 1;
       

      Выход :
      Приведенный выше запрос обновит два столбца в первой строке, и таблица Студент теперь будет выглядеть так:

      PRATIK

      ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН Возраст
      1 PRATIK SIKKIM XXXXXXXXXX 18
      2 RAMESH GURGAON XXXXXX54 GURGAON XXXXXX74 ROHTAK XXXXXXXXXX 20
      4 SURESH Дели XXXXXXXXXX 18
      3 PRATIK ROHTAXX57 РАМЕШ ГУРГАОН XXXXXXXXXX 18

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

  • Отсутствие предложения WHERE: Если мы опустим предложение WHERE в запросе на обновление, все строки будут обновлены.
     ОБНОВЛЕНИЕ НАБОР учеников = 'PRATIK';
     

    Вывод:
    Таблица Студент теперь будет выглядеть так:

    900XXXXXXX

    900XXXXXX

    900XXXXXXX

    ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН
    75 Возраст

    1 PRATIK Дели XXXXXXXXXX 18
    2 PRATIK GURGAON XXXXXXXXXX 18
    3 PRATIK 900K57

    XXX 2054

    4 PRATIK Delhi XXXXXXXXXX 18
    3 PRATIK ROHTAK XXXXXXXXXX 20
    20
    20
    GXXX GXXX GXXX GXX

Это Статья предоставлена ​​ Harsh Agarwal .Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на [email protected]. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями теории CS для собеседований SDE с помощью курса CS Theory Course по приемлемой для студентов цене и будьте готовы к отрасли.

Оператор SQL UPDATE — обновление данных в таблице

Сводка : в этом руководстве вы узнаете, как использовать оператор SQL UPDATE для изменения существующих данных в таблице.

Синтаксис SQL UPDATE

Оператор UPDATE изменяет существующие данные в одной или нескольких строках таблицы. Ниже показан синтаксис оператора UPDATE :

 

Таблица UPDATE ЗАДАВАТЬ column1 = новое_значение1, столбец2 = новое_значение2, ... КУДА условие;

Чтобы обновить данные в таблице, вам необходимо:

  • Сначала укажите имя таблицы, данные которой вы хотите изменить, в предложении UPDATE .
  • Во-вторых, назначьте новое значение столбцу, который вы хотите обновить. Если вы хотите обновить данные в нескольких столбцах, каждая пара столбец = значение разделяется запятой (,).
  • В-третьих, укажите, какие строки вы хотите обновить, в предложении WHERE. Предложение WHERE является необязательным.Если вы опустите предложение WHERE , все строки в таблице будут обновлены.

Ядро базы данных выдает сообщение с указанием количества затронутых строк после выполнения инструкции.

Примеры операторов SQL UPDATE

Давайте рассмотрим некоторые примеры использования оператора UPDATE с таблицей сотрудников :

SQL UPDATE пример одного столбца

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

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

 

ВЫБРАТЬ идентификатор сотрудника, фамилия, имя ИЗ northwind_bk.employees КУДА employeeid = 3;

Следующее заявление изменяет фамилию Джанет с Леверинг на Хилл:

 

ОБНОВЛЕНИЕ сотрудников ЗАДАВАТЬ lastname = 'Холм' КУДА employeeID = 3;

Язык кода: JavaScript (javascript)

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

SQL UPDATE несколько столбцов

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

 

UPDATE сотрудников ЗАДАВАТЬ адрес = '1300 Carter St', city ​​= 'Сан-Хосе', почтовый индекс = 95125, region = 'CA' КУДА employeeID = 3;

Язык кода: JavaScript (javascript)

SQL UPDATE несколько строк

Следующий оператор UPDATE увеличивает зарплату на 2% для сотрудников, чья зарплата меньше 2000 долларов:

 

UPDATE сотрудников ЗАДАВАТЬ зарплата = зарплата * 1.02 КУДА зарплата <2000;

Повышение по службе получили сотрудники с зарплатой менее 2К.

SQL UPDATE из SELECT

Следующий запрос выбирает продавца, который отвечал за более чем 100 заказов:

 

SELECT идентификатор сотрудника, COUNT (идентификатор заказа) ИЗ заказы КУДА shippeddate НЕ ПУСТО ГРУППА ПО идентификатору сотрудника HAVING COUNT (orderid)> 100;

Язык кода: PHP (php)

Следующий запрос увеличивает зарплату лучших продавцов на 5%.Идентификаторы лучших продавцов предоставляются с помощью подзапроса.

 

ОБНОВЛЕНИЕ сотрудников ЗАДАВАТЬ зарплата = зарплата * 1,05 КУДА идентификатор сотрудника IN (ВЫБРАТЬ идентификатор сотрудника ИЗ (ВЫБРАТЬ идентификатор сотрудника, COUNT (идентификатор заказа) ИЗ заказы КУДА shippeddate НЕ ПУСТО ГРУППА ПО идентификатору сотрудника HAVING COUNT (orderid)> 100) bestsalesperson)

Язык кода: PHP (php)

В этом руководстве мы показали вам, как использовать оператор SQL UPDATE для изменения данных в одной или нескольких строках таблицы.

Было ли это руководство полезным?

Как выполнить ОБНОВЛЕНИЕ из инструкции SELECT в SQL Server

В этой статье мы изучим различные методы, которые используются для обновления данных в таблице данными из других таблиц. Структура запроса UPDATE from SELECT является основным методом выполнения этих обновлений.

Запрос UPDATE используется для изменения существующей строки или строк в базе данных. Запросы UPDATE могут изменять все строки таблиц, или мы можем ограничить влияние оператора update для определенных строк с помощью предложения WHERE .В основном мы используем постоянные значения для изменения данных, например следующие структуры.

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

Таблица ОБНОВЛЕНИЯ

SET col1 = constant_value1, col2 = constant_value2, colN = constant_valueN

Оператор условного обновления используется для изменения данных, которые удовлетворяют условию WHERE .

Таблица ОБНОВЛЕНИЯ

SET col1 = constant_value1, col2 = constant_value2, colN = constant_valueN

WHERE col = val

Однако для разных сценариев нам не может хватить этого типа использования постоянного значения, и нам нужно использовать данные других таблиц, чтобы обновить нашу таблицу. Этот тип оператора обновления немного сложнее, чем обычные структуры.В следующих разделах мы узнаем, как написать этот тип запроса на обновление с помощью различных методов, но сначала мы должны подготовить наши образцы данных. Итак, давайте сделаем это.

Подготовка выборки данных

С помощью следующего запроса мы создадим таблицы Persons и AddressList и заполним их некоторыми синтетическими данными. Эти две таблицы связаны через столбец PersonId , что означает, что в этих двух таблицах значение столбца PersonId представляет одного и того же человека.

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

18

19

20

21

22

23

24

25

26

27

28

29

30

000

000 34

35

36

37

38

СОЗДАТЬ ТАБЛИЦУ dbo.Лица

(PersonId INT

PRIMARY KEY IDENTITY (1, 1) NOT NULL,

PersonName VARCHAR (100) NULL,

PersonLastName VARCHAR (100) NULL,

PersonPostCode VARCHAR 9 (100) NULL) (100) NULL)

GO

CREATE TABLE AddressList (

[AddressId] [int] PRIMARY KEY IDENTITY (1,1) NOT NULL,

[PersonId] [int] NULL,

[ PostCode] [varchar] (100) NULL,

[City] [varchar] (100) NULL)

GO

INSERT INTO Persons

(PersonName, PersonLastName)

VALUES (N0002

) Salvador ', N'Williams'),

(N'Lawrence ', N'Brown'),

(N'Gilbert ', N'Jones'),

(N'Ernest ', N'Smith') ,

(N'Jorge ', N'Johnson')

GO

INSERT INTO AddressList

(PersonI d, PostCode, City)

ЗНАЧЕНИЯ

(1, N'07145 ', N'Philadelphia'),

(2, N'68443 ', N'New York'),

(3, N'50675 ', N'Phoenix'),

(4, N'96573 ', N'Chicago')

ВЫБРАТЬ * ИЗ ЛИЦ

ВЫБРАТЬ * ИЗ AddressList

ОБНОВЛЕНИЕ из SELECT: метод соединения

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

В следующем примере мы обновим данные столбцов PersonCityName и PersonPostCode с данными столбцов City и PostCode таблицы AdressList .

ОБНОВЛЕНИЕ Согласно

НАБОР

Per.PersonCityName = Addr.City,

Per.PersonPostCode = Addr.PostCode

FROM Persons Per

INNER JOIN

AddressList Addr

ON Per.PersonId = Addr.PersonId

После выполнения обновления из запроса выбора вывод таблицы Persons будет таким, как показано ниже;

Давайте попробуем разобраться в приведенном выше коде:

Мы ввели имя таблицы, которое будет обновлено после оператора UPDATE .После ключевого слова SET мы указали имена столбцов, которые нужно обновить, а также сопоставили их с указанными столбцами таблицы. После предложения FROM мы повторно ввели имя таблицы, которое будет обновлено. После предложения INNER JOIN мы указали указанную таблицу и присоединили ее к таблице для обновления. В дополнение к этому мы можем указать предложение WHERE и отфильтровать любые столбцы ссылочной или обновленной таблицы. Мы также можем переписать запрос, используя псевдонимы для таблиц.

ОБНОВЛЕНИЕ для

НАБОР

Per.PersonCityName = Addr.City,

Per.PersonPostCode = Addr.PostCode

FROM Persons Per

INNER JOIN

AddressPonIddon 9000.Idr.

Совет по производительности:

Индексы - очень полезные объекты базы данных для повышения производительности запросов в SQL Server.В частности, если мы работаем над производительностью запроса на обновление, мы должны учитывать эту вероятность. Следующий план выполнения иллюстрирует план выполнения предыдущего запроса. Единственное отличие состоит в том, что этот запрос обновил 3 000 000 строк таблицы Persons . Этот запрос был выполнен за 68 секунд.

Мы добавили некластеризованный индекс в таблицу Persons перед обновлением, и добавленный индекс включает столбцы PersonCityName и PersonPostCode в качестве ключа индекса.

Следующий план выполнения демонстрирует план выполнения того же запроса, но этот запрос был выполнен в течение 130 секунд из-за добавленного индекса, в отличие от первого.

Операторы обновления индекса и сортировки потребляют 74% стоимости плана выполнения. Мы видели эту очевидную разницу в производительности одного и того же запроса из-за использования индекса в обновленных столбцах. В результате, если обновленные столбцы используются индексами, как, например, это, производительность запроса может отрицательно сказаться.В частности, мы должны учитывать эту проблему, если мы будем обновлять большое количество строк. Чтобы решить эту проблему, мы можем отключить или удалить индекс перед выполнением запроса на обновление.

С другой стороны, на операторе Sort , отображается предупреждающий знак, который указывает на то, что у этого оператора что-то идет не так. Когда мы наводим указатель мыши на этот оператор, мы можем видеть детали предупреждения.

Во время выполнения запроса оптимизатор запросов вычисляет необходимое потребление памяти для запроса на основе предполагаемых номеров строк и размера строки.Однако эта оценка потребления может быть неверной по разным причинам, и если запрос требует больше памяти, чем оценка, он использует данные tempdb. Этот механизм называется утечкой базы данных tempdb и приводит к потере производительности. Причина этого: память всегда быстрее, чем база данных tempdb, потому что база данных tempdb использует ресурсы диска.

Вы можете увидеть эту фантастическую статью SQL Server 2017: SQL Sort, Spill, Memory и Adaptive Memory Grant Feedback для получения дополнительных сведений о проблеме утечки tempdb.

ОБНОВЛЕНИЕ из SELECT: оператор MERGE

Оператор MERGE используется для управления (INSERT, UPDATE, DELETE) целевой таблицей путем ссылки на исходную таблицу для совпадающих и несовпадающих строк. Оператор MERGE может быть очень полезен для синхронизации таблицы из любой исходной таблицы.

Теперь, если мы вернемся к нашей позиции, оператор MERGE можно использовать в качестве альтернативного метода для обновления данных в таблице данными из другой таблицы.В этом методе справочную таблицу можно рассматривать как исходную таблицу, а целевую таблицу - это таблица, которая будет обновляться. Следующий запрос может быть примером этого метода использования.

MERGE Persons AS Per

USING (SELECT * FROM AddressList) AS Addr

ON Addr.PersonID = Per.PersonID

КОГДА СОБИРАЕТСЯ ТОГДА

НАБОР ОБНОВЛЕНИЙ

Per.PersonPostCode =

Per.PostCode =

PersonCityName = Addr.City;

ВЫБРАТЬ * ИЗ ЛИЦ

Теперь давайте построчно займемся предыдущим обновлением в выбранном запросе.

Мы ввели таблицу Persons после оператора MERGE , потому что это наша целевая таблица, которую мы хотим обновить, и мы дали ей псевдоним Per , чтобы использовать остальную часть запроса.

ИСПОЛЬЗОВАНИЕ (ВЫБРАТЬ * ИЗ AddressList) AS Адрес

После оператора USING мы указали исходную таблицу.

ON Addr.PersonID = Per.PersonID

С помощью этого синтаксиса определяется условие соединения между целевой и исходной таблицами.

КОГДА СООТВЕТСТВУЕТ ТОГДА

НАБОР ОБНОВЛЕНИЯ Per.PersonPostCode = Addr.PostCode;

В этой последней строке запроса мы выбрали метод обработки совпадающих строк.Индивидуально для этого запроса мы выбрали метод UPDATE для сопоставленных строк целевой таблицы. Наконец, мы добавили знак точки с запятой (;), потому что операторы MERGE должны заканчиваться знаками точки с запятой.

ОБНОВЛЕНИЕ из SELECT: метод подзапроса

Подзапрос - это внутренний запрос, который можно использовать внутри операторов DML (SELECT, INSERT, UPDATE и DELETE). Основная характеристика подзапросов заключается в том, что они могут выполняться только с внешним запросом.

Метод подзапроса - это самый простой и простой метод обновления существующих данных из данных других таблиц. Заметная разница в этом методе заключается в том, что это может быть удобный способ обновить один столбец для таблиц с небольшим количеством строк. Теперь мы выполним следующий запрос, а затем проанализируем его.

ОБНОВЛЕНИЕ Персон

НАБОР Persons.PersonCityName = (ВЫБРАТЬ AddressList.PostCode

FROM AddressList

ГДЕ AddressList.PersonId = Persons.PersonId)

После выполнения обновления из оператора выбора вывод таблицы будет таким, как показано ниже;

Как мы видим, данные столбца PersonCityName таблицы Persons были обновлены данными столбца City таблицы AddressList для сопоставленных записей для столбца PersonId .Относительно этого метода следует выделить следующие важные моменты.

  • Если подзапрос не смог найти ни одной совпадающей строки, обновленное значение будет изменено на NULL.
  • Если подзапрос находит несколько совпадающих строк, запрос на обновление вернет ошибку, как показано ниже:

  • Часто метод обновления подзапроса может не обеспечивать удовлетворительную производительность.

Заключение

В этой статье мы научились обновлять данные в таблице данными, которые содержатся в других таблицах.Структура запроса « UPDATE from SELECT » может использоваться для выполнения этого типа сценария обновления данных. Также мы можем использовать альтернативные операторы MERGE и методы подзапроса.

Эсат Эркеч - специалист по SQL Server, который начал свою карьеру более 8 лет назад в качестве разработчика программного обеспечения. Он является сертифицированным экспертом по решениям Microsoft SQL Server.

Большую часть своей карьеры он посвятил администрированию и разработке баз данных SQL Server. В настоящее время он занимается администрированием баз данных и бизнес-аналитикой.Вы можете найти его в LinkedIn.

Посмотреть все сообщения от Esat Erkec

Последние сообщения от Esat Erkec (посмотреть все)

SQL Server: инструкция UPDATE


В этом руководстве по SQL Server объясняется, как использовать оператор UPDATE в SQL Server (Transact-SQL) с синтаксисом и примерами.

Описание

Оператор UPDATE SQL Server (Transact-SQL) используется для обновления существующих записей в таблице в базе данных SQL Server. Существует 3 синтаксиса для оператора UPDATE в зависимости от того, выполняете ли вы традиционное обновление или обновляете одну таблицу данными из другой таблицы.

Синтаксис

Синтаксис оператора UPDATE при обновлении одной таблицы в SQL Server (Transact-SQL):

 Таблица ОБНОВЛЕНИЯ
УСТАНОВИТЬ столбец1 = выражение1,
    столбец2 = выражение2,
    ...
[ГДЕ условия]; 

ИЛИ

Синтаксис оператора UPDATE при обновлении одной таблицы данными из другой таблицы в SQL Server (Transact-SQL):

 ОБНОВЛЕНИЕ table1
УСТАНОВИТЬ столбец1 = (ВЫБРАТЬ выражение1
               ИЗ table2
               ГДЕ условия)
[ГДЕ условия]; 

ИЛИ

Синтаксис оператора UPDATE SQL Server при обновлении одной таблицы данными из другой таблицы:

 ОБНОВЛЕНИЕ table1
УСТАНОВИТЬ table1.столбец = table2.expression1
ИЗ table1
INNER JOIN table2
ВКЛ (table1.column1 = table2.column1)
[ГДЕ условия]; 

Параметры или аргументы

столбец1, столбец2
Столбцы, которые вы хотите обновить.
выражение1, выражение2
Новые значения для присвоения column1 , column2 . Таким образом, column1 будет присвоено значение expression1 , column2 будет присвоено значение expression2 и так далее.
ГДЕ условия
Необязательно. Условия, которые должны быть выполнены для выполнения обновления.

Пример - обновление одного столбца

Давайте посмотрим на очень простой пример запроса UPDATE SQL Server.

Например:

 сотрудников UPDATE
НАБОР last_name = 'Джонсон'
ГДЕ employee_id = 10; 

Этот пример ОБНОВЛЕНИЯ SQL Server обновит last_name до 'Johnson' в таблице employee , где employee_id равен 10.

Пример - обновление нескольких столбцов

Давайте рассмотрим пример SQL Server UPDATE, в котором вы можете обновить более одного столбца с помощью одного оператора UPDATE.

Например:

 сотрудников UPDATE
НАБОР first_name = 'Кайл',
    employee_id = 14
ГДЕ last_name = 'Джонсон'; 

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

Этот пример оператора UPDATE SQL Server обновит first_name до «Kyle» и employee_id до 14, где last_name - «Johnson».

Пример - обновление таблицы данными из другой таблицы

Давайте посмотрим на пример UPDATE, который показывает, как обновить таблицу данными из другой таблицы в MySQL.

Например:

 ОБНОВЛЕНИЕ сотрудников 
SET first_name = (ВЫБЕРИТЕ first_name
ИЗ контактов
WHERE contacts.last_name = employee.last_name)
WHERE employee_id> 95;

В этом примере UPDATE будет обновлена ​​только таблица сотрудников для всех записей, в которых employee_id больше 95.Когда last_name из таблицы контактов совпадает с last_name из таблицы employee , first_name из таблицы contacts будет скопировано в поле first_name в таблице employee .

Вы можете переписать этот оператор UPDATE в SQL Server, используя второй синтаксис, чтобы обновить таблицу данными из другой таблицы.

Например:

 сотрудников UPDATE
НАБОР сотрудников.first_name = contacts.first_name
ОТ сотрудников
INNER JOIN контакты
ВКЛ (employee.last_name = contacts.last_name)
ГДЕ employee_id> 95; 

В этом примере UPDATE будет выполнено то же обновление, что и в предыдущем.

ЗАПРОС ОБНОВЛЕНИЯ в SQL

Автор: Чайтанья Сингх | Подано: SQL

Запрос на обновление используется для обновления существующих строк (записей) в таблице. В последних нескольких руководствах мы увидели, как вставлять данные в таблицу с помощью запроса INSERT и как получать данные с помощью запроса SELECT и предложения Where.Что, если мы хотим обновить существующую запись? здесь появляется запрос на обновление. Используя это, мы можем обновить любое количество строк в таблице.

Синтаксис
 ОБНОВЛЕНИЕ Имя таблицы
SET имя_столбца1 = значение, имя_столбца2 = значение ....
ГДЕ условие; 

Query обновит только те строки, которые удовлетворяют условию, определенному в предложении where.

Пример

СОТРУДНИКОВ стол:

 + ------ + ---------- + --------- + ---------- +
| SSN | EMP_NAME | EMP_AGE | EMP_SALARY |
+ ------ + ---------- + --------- + ---------- +
| 101 | Стив | 23 | 9000.00 |
| 223 | Питер | 24 | 2550.00 |
| 388 | Шубхам | 19 | 2444.00 |
| 499 | Чайтанья | 29 | 6588.00 |
| 589 | Апурв | 21 | 1400.00 |
| 689 | Раджат | 24 | 8900.00 |
| 700 | Аджит | 20 | 18300.00 |
+ ------ + ---------- + --------- + ---------- + 

Обновите зарплату сотрудников до 10000, если они старше 25 лет.

 SQL> ОБНОВЛЕНИЕ СОТРУДНИКОВ
УСТАНОВИТЬ EMP_SALARY = 10000
ГДЕ EMP_AGE> 25; 

Обновленная таблица EMPLOYEES будет выглядеть так:

 + ------ + ---------- + --------- + ---------- +
| SSN | EMP_NAME | EMP_AGE | EMP_SALARY |
+ ------ + ---------- + --------- + ---------- +
| 101 | Стив | 23 | 9000.00 |
| 223 | Питер | 24 | 2550.00 |
| 388 | Шубхам | 19 | 2444.00 |
| 499 | Чайтанья | 29 | 10000.00 |
| 589 | Апурв | 21 | 1400.00 |
| 689 | Раджат | 24 | 8900.00 |
| 700 | Аджит | 20 | 18300.00 |
+ ------ + ---------- + --------- + ---------- + 

Как видите, в таблице указан только один сотрудник старше 25 лет. Заработная плата для сотрудника обновлена ​​до 10000.

Обновить зарплату сотрудника «Апурв» до 1 20000.

 SQL> ОБНОВЛЕНИЕ СОТРУДНИКОВ
УСТАНОВИТЬ EMP_SALARY = 120000
ГДЕ EMP_NAME = 'Apoorv'; 

Выход:

 + ------ + ---------- + --------- + ---------- +
| SSN | EMP_NAME | EMP_AGE | EMP_SALARY |
+ ------ + ---------- + --------- + ---------- +
| 101 | Стив | 23 | 9000.00 |
| 223 | Питер | 24 | 2550.00 |
| 388 | Шубхам | 19 | 2444.00 |
| 499 | Чайтанья | 29 | 10000.00 |
| 589 | Апурв | 21 | 12000.00 |
| 689 | Раджат | 24 | 8900.00 |
| 700 | Аджит | 20 | 18300.00 |
+ ------ + ---------- + --------- + ---------- + 

MySQL запрос UPDATE с примером

Что такое запрос UPDATE?

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

Синтаксис команды обновления MySQL

Базовый синтаксис запроса на обновление в MySQL показан ниже.

 ОБНОВЛЕНИЕ `table_name` SET` column_name` = `new_value '[WHERE condition]; 

ЗДЕСЬ

  • UPDATE `table_name` - это команда, которая сообщает MySQL об обновлении данных в таблице.
  • SET `имя_столбца` =` новое_значение '- это имена и значения полей, на которые будет воздействовать запрос на обновление. Обратите внимание: при установке значений обновления строковые типы данных должны быть заключены в одинарные кавычки. Числовые значения не нужно заключать в кавычки. Тип данных даты должен быть в одинарных кавычках и в формате «ГГГГ-ММ-ДД».
  • [WHERE condition] является необязательным и может использоваться для установки фильтра, ограничивающего количество строк, затронутых запросом UPDATE MySQL.

Обновление в примере MySQL

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

Членский номер Требуются обновления
1 Изменен контактный номер с 999 на 0759 253532
2 Измените имя на Джанет Смит Джонс, а физический адрес следует обновить на Мелроуз 123

Прежде чем вносить какие-либо обновления в наши данные, мы начнем с внесения обновлений для членского номера 1. Давайте извлечем запись для членского номера 1.Показанный ниже сценарий помогает нам в этом.

 ВЫБРАТЬ * ИЗ `members` ГДЕ` members_number` = 1; 

Выполнение вышеуказанного скрипта дает нам следующие результаты.

 
членский_номер полные_имена пол дата_ рождения физический_адрес почтовый_адрес contct_number эл. 4 Личная сумка 999 Этот адрес электронной почты защищен от спам-ботов.У вас должен быть включен JavaScript для просмотра.

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

 ОБНОВЛЕНИЕ `members` SET` contact_number` = '0759 253 542' ГДЕ `members_number` = 1; 

Выполнение вышеуказанного сценария обновляет контактный номер с 999 до 0759 253 532 для членского номера 1. Давайте теперь посмотрим на запись для членского номера 1 после выполнения сценария обновления.

 ВЫБРАТЬ * FROM `members` ГДЕ` members_number` = 1; 

Выполнение вышеуказанного скрипта дает нам следующие результаты.

  Jones  Январь 
членский_номер полные_имя пол дата_ рождения физический_адрес почтовый_адрес contct_number эл.почта
1 4 Личная сумка 0759 253 542 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Давайте теперь посмотрим на обновления, необходимые для членского номера 2.

 
членский_номер полные_имена пол дата_ рождения физический_адрес 69 почтовый_адрес Smith Jones Женский 23-06-1980 Park Street NULL NULL Этот адрес электронной почты защищен от спам-ботов.У вас должен быть включен JavaScript для просмотра.

Следующий скрипт помогает нам в этом.

 ОБНОВЛЕНИЕ `members` SET` full_names` = 'Janet Smith Jones', `physical_address` = 'Melrose 123' WHERE` members_number` = 2; 

Выполнение вышеуказанного сценария обновляет полные имена для членского номера 2 на Джанет Смит Джонс и физический адрес на Мелроуз 123.

 
членский_номер полные_имя пол дата_ рождения физический_адрес почтовый_адрес контактный_номер эл. NULL NULL Этот адрес электронной почты защищен от спам-ботов.У вас должен быть включен JavaScript для просмотра.

Сводка

  • Команда обновления используется для изменения существующих данных.
  • «Предложение WHERE» используется для ограничения количества строк, затронутых запросом UPDATE.

Оператор SQL UPDATE (Transact SQL)

Используйте оператор SQL UPDATE для изменения данных в столбцах таблицы данных SQL Server. В этой статье давайте рассмотрим использование оператора UPDATE. Мы обсуждаем некоторые передовые практики, ограничения и подводим итоги на нескольких примерах.

Это третья статья в серии статей. Вы можете начать с самого начала, прочитав Введение в операторы изменения данных SQL Server.

Все примеры для этого урока основаны на Microsoft SQL Server Management Studio и базе данных AdventureWorks. Начните использовать эти бесплатные инструменты уже сегодня. Получить мое руководство Начало работы с SQL Server .

Прежде чем мы начнем

Хотя в этой статье в качестве примеров используется база данных AdventureWorks, я решил создать примерную таблицу для использования в базе данных, чтобы лучше проиллюстрировать примеры.Здесь вы можете найти скрипт, который вам понадобится для запуска.

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

 С topSalesPerson
(FullName, SalesLastYear, City, rowguid)
AS (ВЫБРАТЬ S.FirstName + '' + S.LastName,
           S.SalesLastYear,
           С.Сити,
             NEWID () 
    ОТ Sales.vSalesPerson S
   ГДЕ S.SalesLastYear> 1000000 ) 
ВСТАВИТЬ В esqlSalesPerson (FullName, SalesLastYear,
                               Город, rowguid) 
ВЫБЕРИТЕ FullName,
       Продажи в прошлом году,
       Город,
       rowguid
ОТ topSalesPerson 

Вы можете узнать больше об операторе INSERT, прочитав нашу статью Введение в оператор INSERT.

Базовая структура обновления SQL

Используйте оператор SQL UPDATE для изменения значений столбца. Хотя оператор обновления изменяет данные столбца из многих источников, такие как литеральные значения или другие результаты запроса, основной формат остается тем же.

Оператор UPDATE состоит из трех компонентов:

  1. Таблица, которую вы хотите изменить.
  2. Столбец, который нужно изменить.
  3. Исходные данные, которые вы хотите использовать для внесения изменений.

Общий формат оператора UPDATE:

  ОБНОВЛЕНИЕ имя_таблицы
УСТАНОВИТЬ column1 = value1,
       столбец2 = значение2,
…  

Сейчас мы собираемся сделать несколько примеров обновлений, поэтому, если вы еще этого не сделали, запустите сценарий для создания таблицы esqlSalesPerson.

Примеры обновления SQL

Обновлена ​​каждая строка в таблице

В этом примере мы вставляем одну строку в таблицу esqlSalesPerson. Вот его структура таблицы:

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

  ОБНОВЛЕНИЕ esqlSalesPerson
SET City = 'Ann Arbor'  

Вы также можете обновлять более одного столбца за раз. Чтобы обновить как City, так и rowguid, мы можем запустить

  ОБНОВЛЕНИЕ esqlSalesPerson
SET City = 'Анн-Арбор',
       rowguid = NEWID ()  

Что обновляет таблицу до следующего:

  ОБНОВЛЕНИЕ esqlSalesPerson
НАБОР FullName = 'Дон Сакс'
ГДЕ SalesPersonID = 10027  

Меняет имя Дональда Сакса на Дон Сакс.

Обратите внимание, что мы использовали первичный ключ SalesPersonID для фильтрации строки. Это позволяет очень легко гарантировать, что SQL UPDATE применяется к одной строке.

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

Обновления SQL, влияющие на выбранные строки

Оператор UPDATE может обновлять более одной строки. Предложение WHERE управляет этим поведением. UPDATE влияет на все строки, возвращаемые с помощью предложения WHERE.

Предположим, что каждый продавец, чей ID меньше 10031, работал в Saline. Чтобы обновить строки, чтобы отразить это, мы могли бы использовать этот оператор UPDATE:

  ОБНОВЛЕНИЕ esqlSalesPerson
SET City = 'Saline'
ГДЕ SalesPersonID <10031  

, что приводит к модификации строки:

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

Для обновления нескольких столбцов используйте предложение SET, чтобы указать дополнительные столбцы. Как и в случае с отдельными столбцами, вы указываете столбец и его новое значение, а затем еще один набор столбцов и значений.В этом случае каждый столбец отделяется столбцом.

Здесь мы обновим имя и фамилию:

  ОБНОВЛЕНИЕ Лицо.
 Установите FirstName = 'Kenneth'
    , LastName = 'Smith'
 ГДЕ BusinessEntityID = 1  

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

Будьте осторожны! Вы не можете легко «исправить» свои ошибки. Один трюк, который я делаю, чтобы упростить тестирование и изучение, - это «обернуть» мои операторы обновления в транзакцию, чтобы я мог опробовать их без постоянного изменения моей базы данных.

Вот тот же пример для обновления нескольких столбцов , но защищенного транзакцией…

  НАЧАТЬ СДЕЛКУ
 - Попробуйте обновить…

 ОБНОВЛЕНИЕ Person.Person
 Установите FirstName = 'Kenneth'
    , LastName = 'Smith'
 ГДЕ BusinessEntityID = 1

 - Давайте посмотрим, что мы обновили
 ВЫБРАТЬ * ОТ ЛИЦА.
 ГДЕ BusinessEntityID = 1

 -- Отменить изменения…
 ОТКАТ
  

Использование объединений в обновлении SQL

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

 ОБНОВЛЕНИЕ maintable
УСТАНОВИТЬ columnToUpdate = secondtable.columnValue
ИЗ основного стола
       ВНУТРЕННИЙ ПРИСОЕДИНЯЙТЕСЬ второй стол
       ON условие соединения 

Где основная таблица - это таблица, которую вы хотите обновить, а вторая таблица содержит значения обновления; мы используем объединения для сопоставления.

Предположим, что кто-то случайно обновил все значения столбца esqlSalesPerson.City до NULL!

Как мы можем легко повторно заполнить эти данные, не вводя их повторно?

Зная, что esqlSalesPerson изначально был заполнен информацией из отдела продаж, мы используем знания для настройки запроса, который перекачивает данные из vSalesPerson в esqlSalesPerson.Это возможно, поскольку полное имя продавца является общим для обеих таблиц.

На диаграмме ниже вы увидите, где есть совпадения между этими двумя таблицами:

Сопоставляя esqlSalesPerson.FullName с vSalesPerson, мы можем обновить esqlSalesPerson.City с соответствующей записью.

Прежде чем мы пойдем дальше, давайте сначала удалим значения столбца city. Для этого вы можете выполнить следующее, а затем убедиться, что все города имеют значение NULL.

 - Заглушить город
ОБНОВЛЕНИЕ esqlSalesPerson
SET City = Null;

-- Доказательство
ВЫБЕРИТЕ SalesPersonID, Город
ОТ esqlSalesPerson 

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

 ОБНОВЛЕНИЕ esqlSalesPerson
УСТАНОВИТЬ Город = v.Город
ОТ esqlSalesPerson
       ВНУТРЕННИЕ ПРИСОЕДИНЯЙТЕСЬ к Sales.vSalesPerson v
       НА e.FullName = v.FirstName + '' + v.LastName 

Как только вы посмотрите на инструкцию, вы увидите, что мы добавили предложения FROM и INNER JOIN.

Напомним, что предложение INNER JOIN используется для сопоставления строк из одной таблицы с другой с использованием условия соединения.

В нашем случае условием соединения является e.FullName = v.FirstName + ‘‘ + v.LastName. Обратите внимание, что здесь мы создаем полное имя из столбцов представления FirstName и LastName.Это круто, и это работает!

Итак, когда у нас есть соединение, последняя часть бизнеса делает обновление. Мы просто устанавливаем City равным его аналогу v.City, и все в порядке.

Журнал изменений с использованием предложения OUTPUT

Предложение OUTPUT регистрирует изменения, внесенные в строки, затронутые оператором UPDATE.

Предположим, что показатели SalesLastYear оказались неверными и их необходимо скорректировать на пять процентов. Вы можете легко настроить значения, используя следующую инструкцию:

 ОБНОВЛЕНИЕ esqlSalesPerson
УСТАНОВИТЬ SalesLastYear = SalesLastYear * 1.05 

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

Полный сценарий для запуска записи вывода во временную таблицу:

 DECLARE @UpdateLog table (
SalesPersonID int NOT NULL,
OldSalesLastYear int,
NewSalesLastYear int)

ОБНОВЛЕНИЕ esqlSalesPerson
УСТАНОВИТЬ SalesLastYear = SalesLastYear * 1.05
ВЫВОД вставлен. SalePersonID,
       удалено.SalesLastYear,
       вставлен.SalesLastYear
       В @UpdateLog

ВЫБЕРИТЕ SalesPersonID,
       OldSalesLastYear,
       НовыеПродажиПоследнийГод
ОТ @UpdateLog 

Мы не будем говорить о трех частях по очереди.

Обратите внимание, что мы объявляем табличную переменную для хранения регистрируемых результатов. Мы делаем это с помощью следующей команды в нашем скрипте:

 DECLARE @UpdateLog table (
SalesPersonID int NOT NULL,
OldSalesLastYear int,
NewSalesLastYear int) 

Этот оператор определяет таблицу с тремя столбцами и называет табличную переменную @UpdateLog.Причина, по которой мы используем табличную переменную, является временной и будет удалена после закрытия сеанса запроса.

Определив табличную переменную, мы можем безопасно записывать результаты с помощью OUTPUT, как здесь:

 ОБНОВЛЕНИЕ esqlSalesPerson
УСТАНОВИТЬ SalesLastYear = SalesLastYear * 1.05
ВЫВОД вставлен. SalePersonID,
       удалено.SalesLastYear,
       вставлен.SalesLastYear
       INTO @UpdateLog 

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

Старая продажная стоимость существует в deleted.SalesLastYear; тогда как вставленный.SalesLastYear содержит недавно обновленное значение.

Для просмотра зарегистрированных значений вы можете запустить следующее:

 ВЫБЕРИТЕ SalesPersonID,
       OldSalesLastYear,
       НовыеПродажиПоследнийГод
ОТ @UpdateLog 

Что отображает:

Примечание. Если вам нравится предложение OUTPUT, помните, что вы также можете использовать его с INSERT, DELETE и MERGE!

Рекомендации по использованию оператора SQL UPDATE

Оператор UPDATE сложен и требует учета множества элементов.

Вот некоторые из наиболее важных. Полный список можно найти в статье UPDATE (Transact-SQL).

Рекомендации по типу данных (заполнение)

Имейте в виду, что при обновлении данных в столбцах с типом данных CHAR, VARCHAR или VARBINARY заполнение или усечение данных зависит от параметра SET ANSI_PADDING.

Когда SET ANSI_PADDING OFF, тогда типы данных CHAR дополняются пробелами, типы данных VARCHAR удаляют конечные пробелы, а VARBINARY удаляют конечные нули.

Например, если поле определено как CHAR (10) и вы обновляете значение «Kris» в этом столбце, то оно будет заполнено шестью пробелами. Значение изменено на «Крис»

.

Оператор SQL UPDATE Обработка ошибок

Вы можете обрабатывать ошибки при выполнении оператора UPDATE с помощью конструкции TRY… CATCH.

Есть несколько распространенных причин, по которым оператор UPDATE может не работать. Вот некоторые из наиболее распространенных:

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

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

Это поведение «все или ничего» можно изменить для устранения арифметических ошибок. Рассмотрим деление на нулевую ошибку.

 ОБНОВЛЕНИЕ myNumbers
УСТАНОВИТЬ X = 10/0 

Выдает ошибку, если для SET ARITHABORT установлено значение ON.В этом случае вставка останавливается, строки не обновляются и выдается ошибка.

Поведение блокировки инструкции SQL UPDATE

Исключительная (X) блокировка всегда ставится на таблицу при запуске обновления. Блокировка сохраняется до завершения оператора обновления. Поскольку это исключительная блокировка, никакая другая транзакция не может изменять данные в этой таблице, пока не будет завершена та, которая изначально установила блокировку.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *