Что ж! Осталась одна операция с таблицами БД, которую мы с вами еще не рассматривали. Конечно же, изменение данных. Данные в таблицах БД изменяются с помощью оператора DML - UPDATE. Синтаксис этого оператора таков:
------------------------- UPDATE ----------- таблица --------- SET ---------------------------- -------------------------------------- имя столбца -- = -- выражение -------------------------- ------------------------- WHERE ------ условие ------------------------------------------------
Синтаксически все довольно просто, как видим, в операторе UPDATE так же присутствует предложение WHERE, а следовательно, применимы все правила получения результирующего набора. Давайте посмотрим на практике, что можно сделать с таблицей с помощью оператора DML - UPDATE. Например, введите примерно следующее:
UPDATE PEOPLE SET NM = 'IVAN' / COMMIT /
Получаем:
SQL> UPDATE PEOPLE 2 SET NM = 'IVAN' 3 / 2 строк обновлено. SQL> COMMIT 2 / Фиксация обновлений завершена.
А, вот теперь давайте уже не вслепую как в прошлый раз, а уже на деле посмотрим, что же произошло с таблицей:
SELECT * FROM PEOPLE /
Вывод:
SQL> SELECT * FROM PEOPLE 2 / ID NM FM OT ---- ------ ----------- --------------- 2 IVAN NULL Martovich 3 IVAN Black NULL
Ух ты! Неожиданный ход, не так ли? Вроде бы мы ввели одно значение в операторе. А изменились все записи, хоть их всего то и две! Да, именно так и должно быть. Ведь мы не указали UPDATE в условии какие записи менять, а какие нет! Вот и получите результат, он прошелся по всей таблице от первой до последней записи и изменил их значение на IVAN! Теперь давайте исправим ситуацию и применим трюк с NULL в предложении WHERE! Вот так:
UPDATE PEOPLE SET FM = 'Jason' WHERE FM IS NULL / COMMIT / SELECT * FROM PEOPLE /
Получаем следующее:
SQL> UPDATE PEOPLE 2 SET FM = 'Jason' 3 WHERE FM IS NULL 4 / 1 строка обновлена. SQL> COMMIT 2 / Фиксация обновлений завершена. SQL> SELECT * FROM PEOPLE 2 / ID NM FM OT ---- ------ ----------- --------------- 2 IVAN Jason Martovich 3 IVAN Black NULL
Изменилась тоько одна запись, а теперь давайте вернем Jason-у его старое имя:
UPDATE PEOPLE SET NM = 'Bob' WHERE FM = 'Jason' / COMMIT / SELECT * FROM PEOPLE /
Смотрим, что получилось:
SQL> UPDATE PEOPLE 2 SET NM = 'Bob' 3 WHERE FM = 'Jason' 4 / 1 строка обновлена. SQL> COMMIT 2 / Фиксация обновлений завершена. SQL> SELECT * FROM PEOPLE 2 / ID NM FM OT ---- ------ ----------- --------------- 2 Bob Jason Martovich 3 IVAN Black NULL
Вот теперь Bob Jason стал похож на человека! Всего-то мы применили предложение WHERE! Теперь давайте добавим запись с NULL значениями, то есть пустую:
INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(5, NULL, NULL, NULL) / COMMIT / SELECT * FROM PEOPLE /
Вывод:
SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(5, NULL, NULL, NULL) 3 / 1 строка создана. SQL> COMMIT 2 / Фиксация обновлений завершена. SQL> SELECT * FROM PEOPLE 2 / ID NM FM OT ---- ------ ---------- --------------- 5 NULL NULL NULL 2 Bob Jason Martovich 3 IVAN Black NULL
Есть пустая запись. А вот теперь давайте изменим ее по всем правилам с применением значения ключевого (уникального) поля ID таблицы PEOPLE:
UPDATE PEOPLE SET NM = 'Irvin', FM = 'Show', OT = 'Brefovich' WHERE ID = 5 / COMMIT / SELECT * FROM PEOPLE /
Получаем результат работы:
SQL> UPDATE PEOPLE 2 SET NM = 'Irvin', 3 FM = 'Show', 4 OT = 'Brefovich' 5 WHERE ID = 5 6 / 1 строка обновлена. SQL> COMMIT 2 / Фиксация обновлений завершена. SQL> SELECT * FROM PEOPLE 2 / ID NM FM OT ---- ------ ---------- --------------- 5 Irvin Show Brefovich 2 Bob Jason Martovich 3 IVAN Black NULL
Вот смотрите внимательно, так работает внутренняя структура почти всех клиентских приложений, берется значение ключевого поля и изменяется именно эта конкретная запись! Теперь давайте изменим значение самого ключа поля применив математическое выражение в части SET оператора UPDATE:
UPDATE PEOPLE SET ID = 5+2 WHERE ID = 5 / COMMIT / SELECT * FROM PEOPLE /
Получаем:
SQL> UPDATE PEOPLE 2 SET ID = 5+2 3 WHERE ID = 5 4 / 1 строка обновлена. SQL> COMMIT 2 / Фиксация обновлений завершена. SQL> SELECT * FROM PEOPLE 2 / ID NM FM OT ---- ------ ---------- --------------- 7 Irvin Show Brefovich 2 Bob Jason Martovich 3 IVAN Black NULL
Теперь, как мы видим, значение ключевого поля изменилось с 5 на 7. А, остальное не изменялось. Главное, чтобы это значение не совпало ни с одним из уже существующих в таблице PEOPLE! Вот собственно так работает оператор UPDATE. В итоге мы с вами рассмотрели три основных рабочих лошадки, обработки и изменения таблиц БД! :)