Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать
  1. Зміна рядків за допомогою команди update.

Команда UPDATE змінює значення в існуючих рядках таблиці. Ви можете використовувати цю команду, щоб змінювати:

• всі рядки в таблиці;

• окремі рядки в таблиці.

Щоб відновити рядки, потрібно вказати:

• яку таблицю змінювати;

• назви стовпців, які потрібно змінити, а також нові значення;

• умова пошуку з метою знаходження рядків для оновлення (опціонально).

Перерахуємо важливі параметри команди UPDATE:

• використовує речення WHERE, в якому вказується, які рядки потрібно змінити. Без речення WHERE команда UPDATE змінить всі рядки в таблиці;

• може бути небезпечна, тому що ви можете випадково пропустити речення WHERE (і змінити всі рядки) або неправильно вказати умову пошуку для WHERE (і змінити не ті рядки). Перед запуском команди UPDATE ми рекомендуємо запустити команду SELECT з тим ж реченням WHERE, але для оновлення рядків. Команда SELECT відобразить всі рядки, які будуть змінені СУБД при запуску команди UPDATE. Щоб відобразити тільки кількість цих рядків, користуйтеся командою SELECT COUNT (*);

• кожне змінене значення повинне бути того ж типу (або мати можливість для конвертації), що і інші дані в стовпці

• щоб зберегти посилальну цілісність, СУБД дозволяє вказати дію, яка буде виконуватися автоматично за допомогою команди UPDATE при зміні значення, на яке вказує повторний ключ;

• змінене значення не може відмінити обмеження, накладене на стовпець;

• жоден вираз не повинен приводити до арифметичної помилки (наприклад, переповнюванню або ділення на нуль);

• пригадайте, що порядок рядків в таблиці не має значення і що ви не можете управляти розташуванням рядків, тому нові рядки можуть з'явитися в будь-якому місці таблиці

Зміна рядків

Введіть:

UPDATE table

SET column= expr

[WHERE search condition];

table - це назва таблиці, яку ви будете обновляти; column - назва стовпця. (з даними для зміни) в table; expr- буквене позначення, вираз або запит, який прочитує одне значення. Значення, лічене expr, замінить існуюче значення в со1итп. Щоб змінити значення в декількох стовпцях, введіть в пункті SET список виразів (column = expr), розділених комами. Ви можете задавати список полів для оновлення у будь-якому порядку.

Умову Search condition задають умови які повинні дотримуватися для змінних рядків. Цими умовами можуть бути умови WHERE (оператори порівняння, LIKE, BETWEEN, IN і IS NULL, див. розділ 4) або умови запиту (оператори порівняння, IN, ALL, ANY і EXISTS, див. розділ 8) в комбінації з AND, OR і NOT. Якщо ви опустите речення WHERE, будуть змінені всі рядки в таблиці.

Лістинг 4.8. Замініть значення contract нулем у всіх рядках titles.

UPDATE titles

SET contract =0;

Лістинг 4.9. Подвоїти ціну на книги по історії.

UPDATE titles

SET price = price * 2.0

WHERE type = 'history';

Лістинг 4.10. Змінити стовпці type і pages для книг по психології.

UPDATE titles

SET type = 'self help',

pages = NULL

WHERE type = 'рsychology';

Лістинг 4.11. Зменшити в двічі продажі книг, які знаходяться на середньому рівні.

UPDATE titles

SET sales = sales * 0.5

WHERE sales > (SELECT AVG(sales)

FROM titles);

Лістинг 4.8 замінює значення contract нулем. Відсутність речення WHERE повідомляє СУБД, що слід змінити значення в стовпці contract у всіх рядках. Команда в лістингу 4.8 змінює 13 рядків.

Лістинг 4.9 використовує арифметичний вираз і умову WHERE, щоб подвоїти ціну на книги по історії. Команда, представлена в цьому лістингу, змінює три рядки.

Лістинг 4.10 змінює стовпці type і pages для книг по психології. Ви використовуєте тільки одне речення SET, що б змінити декілька стовпців, розділивши вирази column = expr комами (не слід ставити кому в кінці останнього виразу). Команда з лістинга 4.10 змінює три рядки.

Лістинг 4.11 використовує підзапит і функцію, щоб зменшити в двічі продажі книг, які продаються краще, ніж всі книги в цілому. Команда, представлена в цьому лістингу, змінює дні рядка.

Ви можете змінити значення в таблиці на підставі значень з іншої таблиці. Лістинг 9.12 використовує підзапити щоб змінити дату публікації КНИГ, які написала Sarah Buchmann. Команда з лістинга 4.11 змінює три рядки.

Припустимо, що видавництво Abatis Publishers (P01) купило видавництво Теnterhooks Press (P04). Тепер всі книги останнього випускаються в Abatis Publishers. Лістинг 4.13 міняє інформацію про видавництво в titles з Р04 на Р01. Запит в реченні WHERE прочитує pub_id для видавництва Tenterhooks Press. СУБД використовує pub_id, щоб зчитати з таблиці titles всі книги, які випускаються видавництвом Tenterhooks Press. Потім СУБД за допомогою значення, зчитаного запитом в реченні SET, змінює відповідні рядки в таблиці titles. Оскільки запити використовуються з незмінним оператором порівняння, вони повинні бути скалярними запитами і зчитувати єдині значення (тобто результат одного рядка або стовпця

СУБД буде розраховувати вирази в реченні SET або WHERE з використанням значень, які знаходилися в стовпцях до початку змін. Розглянемо команду UPDATE:

UPDATE mytable

SET col1 = col1 * 2,

col2 = coll * 4,

col3 = col2 * 8 ,

WHERE col1 = 1

AND Cоl2 = 2;

СУБД задає col1 рівним 2, col2 - рівним 4 (1х4, а не 2х4), col3 - рівним 16 (2х8, а не 4х8).

Лістинг 4.12. Замінити дату публікації для всіх книг, які написала Сара Бухманн, на 1 січня 2003 року.

UPDATE titles

SET pubdate = DATE '2003-01-01'

WHERE title id IN

(SELECT title id

FROM title authors

WHERE au id IN

(SELECT au id

FROM authors

WHERE au fname = 'Sarah'

AND au lname = 'Buchman'));

Лістинг 4.13. Приписати всі книги, випущені видавництвом Tenterhooks Press, видавництву Abatis Publishers.

UPDATE titles

SET pub id =

(SELECT pub id

FROM publishers

WHERE pub name = 'Abatis Publishers')

WHERE pub id =

(SELECT pub id

FROM publishers

WHERE pub name = 'Tenterhooks Press');

Якщо ви бажаєте бути особливо уважними при зміні рядків, можете перевірити команду UPDATE за допомогою тимчасової копії таблиці.

Ви також можете змінювати рядки за допомогою представлень.

Якщо ви застосовуєте транзакції, скористайтеся командою COMMIT після команди UPDATE, щоб зробити зміни постійними.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]