sql12_dml

advertisement
МАНИПУЛИРОВАНИЕ
ДАННЫМИ
Команды обработки данных и
управления транзакциями
Команда
INSERT
UPDATE
DELETE
COMMIT
SAVEPOINT
ROLLBACK
Описание
Добавляет новую строку в таблицу.
Изменяет существующие строки таблицы.
Удаляет строки из таблицы
Делает все незафиксированные изменения
постоянными.
Позволяет произвести откат до определенной
точки сохранения (savepoint).
Отменяет все незафиксированные изменения
данных.
Вставка новых строк в
таблицу: синтаксис
• Вставка новых строк в таблицу производится с
помощью команды INSERT
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
• Этот синтаксис позволяет вставлять только по одной
строке
Вставка новых строк в
таблицу: пример
• Вставка новой строки, содержащей значения для
каждого из столбцов
• Перечисление столбцов в предложении INSERT
необязательно
SQL> INSERT INTO s_dept
2 VALUES (11, 'Finance’, 2);
1 row created.
• Значения указываются в стандартном порядке
столбцов таблицы (в последовательности,
используемой по умолчанию)
• Символьные значения и даты заключаются в
апострофы
Вставка строк с неопределенными
значениями
Неявный метод:
• Столбец опускается в списке столбцов
SQL> INSERT INTO s_dept (id, name)
2 VALUES (12, 'MIS');
1 row created.
• Явный метод:
• Ключевое слово NULL или пустая строка в списке
VALUES (‘’)
SQL> INSERT INTO S_dept
2 VALUES (13, 'Administration', NULL);
1 row created.
Вставка специальных
значений
• Функция USER записывает текущее имя пользователя.
• Функция SYSDATE записывает текущую дату и время.
SQL> INSERT INTO s_emp (id, first_name,
2 last_name, userid, salary, start_date)
3 VALUES (26, 'Donna’,
4 'Smith’, USER, NULL, TO_DATE(SYSDATE));
1 row created.
Подтверждение вставки
• Проверка факта вставки строки в таблицу
SQL> SELECT id, last_name, first_name,
2 userid, start_date, salary
3 FROM
s_emp
4 WHERE id = 26;
ID LAST_NAME FIRST_NAME USERID
START_DAT SALARY
-- --------- ---------- -------------- -----26 Smith
Donna
SFCL26
Ol-JAN-96
Вставка конкретной даты
и времени
• Функция TO_DATE:
– Замещает дату и время, используемые по умолчанию,
конкретными значениями
SQL> INSERT INTO s_emp (id, first_name,
2 last_name, userid, salary, start_date)
3 VALUES (26, 'Donna',
4 'Smith', USER, NULL,
5 TO_DATE('01-JAN-96 08:00',
6 'DD-MON-YY HH:MI'));
1 row created.
• Значения по умолчанию:
– для столетия - текущий век
– для времени - полночь
Вставка значений с помощью
переменных подстановки
• Интерактивный командный файл можно создать с
помощью подставляемых параметров SQL*Plus
SQL> INSERT INTO s_dept (id, name,
2 region_id)
3 VALUES (&department_id, ‘&department_name',
4 &region_id);
Enter value for department_id: 61
Enter value for department_name: Accounting
Enter value for region_id: 2
1 row created.
Создание командного файла с удобным
запросом данных у пользователя
• Команда ACCEPT SQL*PIus запоминает введенное
значение в переменной.
• Команда PROMPT SQL*Plus позволяет выводить на
экран текст, удобный для пользователя.
ACCEPT department_id PROMPT ‘Please
enter the department number: '
ACCEPT department_name PROMPT ‘Please
enter the department_name: ’
ACCEPT region_id PROMPT ‘Please
enter the region number: '
INSERT INTO s_dept (id, name, region_id)
VALUES (&department_id, ‘&department_name’,
&region_id);
Копирование строк из
другой таблицы
• Команда INSERT должна включать подзапрос
SQL> INSERT INTO history (id, last_name, salary,
2 title, start_date)
3 SELECT id, last_name, salary,
4 title, start_date
5 FROM s_emp
6 WHERE start_date < 'Ol-JAN-94';
10 rows created.
• Предложение VALUES не используется
• Количество столбцов, указанных в предложении
INSERT, должно совпадать с количеством столбцов в
подзапросе
Вставка строк: нарушение
условия целостности
SQL> insert into s_dept (id, name, region_id)
2 values (51, 'Education', 10);
insert into s_dept (id, name, region_id)
*
ERROR at line 1:
ORA-02291: integrity constraint (ANNA.S_DEPT_REGION_ID_FK)
violated – parent key not found
Так как отдела номер 10 в таблице регионов нет,
выдается сообщение об ошибке
Обновление строк в
таблице синтаксис
• Для обновления существующих строк используется
команда UPDATE
UPDATE table
SET
column = value [,column = value]
[WHERE condition];
Обновление строк:
примеры
• Перевод сотрудника номер 2 в отдел 10
SQL> UPDATE s_emp
2 SET dept_id =10
3 WHERE id = 2;
1 row updated.
• Перевод сотрудника номер 1 в отдел 32 и увеличение
его зарплаты до 2550
SQL> UPDATE s_emp
2 SET dept_id = 32, salary = 2550
3 WHERE id = 1;
1 row updated.
Обновление всех строк
таблицы
• Если предложение WHERE отсутствует, обновляются
все строки таблицы
SQL> UPDATE s_еmр
2 SET commission_pct = 10;
25 rows updated.
Обновление строк: нарушение
условия целостности
SQL> UPDATE s_emp
2 SET dept_id = 60
3 WHERE dept_id = 10;
ERROR at line 1:
ORA-02291 : integrity constraint
(USR.S_EMP_DEFT_ID_FK) violated - parent key not
found
Так как отдела номер 60 в таблице отделов нет,
выдается сообщение об ошибке
Удаление строк из таблицы:
синтаксис
• Для удаления строк используется команда DELETE
DELETE [FROM] table
[WHERE condition];
• Пример удаления данных о служащих, принятых на
работу после 1 января 1996 г
SQL> DELETE FROM s_emp
2 WHERE start_date >
3 TO_DATE('01.01.1996', 'DD.MM.YYYY');
1 row deleted.
Удаление строк: пример
• Удаление всех строк таблицы путем исключения
предложения WHERE
SQL> DELETE FROM test;
25,000 rows deleted.
• Проверка удаления
SQL> SELECT *
2 FROM test ;
no rows selected
Удаление строк: нарушение
условия целостности
• При попытке удалить строку с первичным ключом,
который одновременно является внешним ключом в
другой таблице, выдается сообщение об ошибке в связи
с нарушением ограничения.
SQL> DELETE FROM S_dept
2 WHERE region_id = 1;
ERROR at line 1:
ORA-02292: integrity constraint
(USR.S_EMP_DEPT_ID_FK) violated - child record found
Транзакции базы данных
• Содержат что-либо из следующего:
– Команды DML, выполняющие единое
согласованное изменение данных
– Одна команда DDL
– Одна команда DCL
• Начинаются с выполнения первой исполняемой
команды SQL
• Заканчиваются одним из следующих событий:
– Выполнение команды COMMIT или ROLLBACK
– Выполнение команды DDL или DCL
(автоматическая фиксация)
– Ошибка, завершение сеанса работы или
аварийный останов системы
Преимущества COMMIT и
ROLLBACK
• Обеспечивают согласованность данных
• Позволяют проверить изменения в данных прежде,
чем сделать их постоянным
• Логически группируют взаимосвязанные операции
Управление транзакциями
COMMIT
INSERT
Маркер точки
сохранения А
UPDATE
Маркер точки
сохранения B
INSERT
DELETE
ROLLBACK
ROLLBACK
ROLLBACK до A ROLLBACK до B
Неявная обработка
транзакций
•
Автоматическая фиксация изменений (COMMIT)
происходит следующих случаях:
– Выполнение команды DDL (например, CREATE)
– Выполнение команды DCL (например, GRANT)
– Нормальный выход из SQL*Plus без явной посылки
команды COMMIT или ROLLBACK
•
Автоматический откат (ROLLBACK) выполняется в
случае аварийного прекращения сеанса работы в
SQL*Plus или отказа системы
Состояние данных перед выполнением
команд COMMIT или ROLLBACK
• Предыдущее состояние данных может быть
восстановлено, т.к. изменения производятся в
буфере базы данных
• Текущий пользователь может просмотреть
результаты своих операций DML с помощью
команды SELECT
• Другие пользователи не могут видеть результаты
команд DML, выполняемых текущим пользователем
• Изменяемые строки блокируются, и другие
пользователи не могут обновлять их содержимое
Состояние данных после
выполнения команды COMMIT
•
•
•
•
Измененные данные записываются в базу данных
Предшествующее состояние данных теряется
Все пользователи могут видеть результаты
Измененные строки разблокируются, и другие
пользователи получают доступ к ним для обработки
данных
• Все точки сохранения стираются
Фиксация изменений в
данных: пример
• Создание нового отдела обучения.
SQL> INSERT INTO s_dept (id, name, region_id)
2 VALUES (54, 'Education', 1);
1 row created.
• Добавление данных, по крайней мере, об одном
служащем
SQL> UPDATE s_emp
2 SET dept_id = 54
3 WHERE id = 2;
1 row updated.
• Фиксация изменений,
SQL> COMMIT;
Commit complete.
Состояние данных после
выполнения команды ROLLBACK
• Отмена всех изменений
• Данные возвращаются в прежнее состояние
• Блокировка строк, над которыми выполнялись
операции, отменяется
SQL> DELETE FROM test;
25,000 rows deleted.
SQL> ROLLBACK;
Rollback, complete.
Откат до маркера
• С помощью команды SAVEPOINT можно создать в
текущей транзакции маркеры для отката
• Откат до такого маркера выполняется с помощью
команды ROLLBACK TO SAVEPOINT
SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
RolIback complete.
Откат на уровне команды
• Если ошибка возникла при выполнении одной
конкретной команды DML, отменяются результаты
только этой команды
• Oracle использует неявную точку сохранения
• Все прочие изменения сохраняются
• Пользователь должен завершать транзакции явно
командой COMMIT или ROLLBACK
Заключение
Команда
INSERT
UPDATE
DELETE
COMMIT
SAVEPOINT
ROLLBACK
Описание
Добавляет новую строку в таблицу.
Изменяет существующие строки.
Удаляет существующие строки.
Делает все незафиксированные
изменения постоянными.
Позволяет произвести откат до
определенной точки сохранения.
Отменяет все незафиксированные
изменения данных.
Download