Вопрос 12: Обновление данных. Обновление строк на основе данных таблицы. Обновление строк на основе данных другой таблицы.


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

Важные моменты:

  • Если инструкция UPDATE, т.е. обновление строк, нарушает какое-нибудь ограничение или правило, или новое значение имеет несовместимый тип данных (хотя бы для одной строки), то возникнет ошибка и все изменения отменяются, никакие строки не обновляются;
  • По умолчанию инструкция UPDATE получает монопольную блокировку на целевую таблицу, которую она изменяет, это означает, что пока одна инструкция UPDATE выполняется, т.е. изменяет данные в таблице, другие инструкции не могут изменять данные в этой таблице;
  • Чтобы использовать инструкцию UPDATE, нужны соответствующие разрешения на изменение данных, а также на чтение данных, если инструкция содержит условие WHERE;
  • Если Вам нужно узнать количество строк, которые Вы обновили инструкцией UPDATE, например, для возврата в клиентское приложение или для любых других целей, то для этого Вы можете использовать функцию @@ROWCOUNT.

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

UPDATE Целевая таблица SET Имя столбца = Значение
FROM Таблица источник
WHERE Условие

Где UPDATE – инструкция обновления; Целевая таблица – таблица, данные в которой необходимо изменить; SET – команда, которая задает список обновляемых столбцов. Каждый следующий столбец указывается через запятую; Имя столбца – столбец, в котором расположены данные, которые необходимо изменить; Значение – новое значение, на которое необходимо изменить значение столбца. Можно указывать как конкретное значение, так и расчётное выражение, функцию или подзапрос. Также можно указать ключевое слово DEFAULT, что будет означать, что столбцу необходимо присвоить значение по умолчанию; FROM – секция, которая указывает таблицу, из которой необходимо взять новое значение столбца. Секция может содержать объединение JOIN; Таблица источник – таблица, в которой расположено новое значение столбца; WHERE – условие отбора строк, подлежащих обновлению.

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

UPDATE goods
SET price = 0

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

Обновление строк на основе данных таблицы

Cинтаксис:

UPDATE {table_name | view_name} 
SET {  column_name = {expression | DEFAULT | NULL}  | 
@variable=expression}[,.n] 
WHERE {search_conditions}

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

num title price
1 Чайник 300
2 Чашка 200
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, затронуты запросом не будут.

В результате получим талицу:

num title price
1 Чайник 150
2 Чашка 100
3 Ложка 25
4 Тарелка 50

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

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

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

Обновление строк на основе данных другой таблицы

Синтаксис:

UPDATE {table_name | view_name} 
SET 
{ column_name={expression | DEFAULT | NULL} 
  |@variable=expression}[,.n] 
[FROM {  <table_source>] 
[WHERE search_conditions]

Например:

UPDATE products 
SET unitprice = unitprice + 2 
FROM products 
  INNER JOIN suppliers ON products.supplierid = suppliers.supplierid 
WHERE suppliers.country = 'USA' 
GO

results matching ""

    No results matching ""