Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к ЛР.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.42 Mб
Скачать

3. Задания для самостоятельной работы

  1. Добавьте первичный ключ к одной из существующих таблиц.

  2. Создайте таблицу с внешним ключом.

  3. Добавьте внешний ключ к одной из существующих таблиц.

  4. Осуществите добавление ограничения типа check.

  5. Добавьте ограничение в любую из таблиц типа Default.

4 Контрольные вопросы

  1. Дайте определение ограничению.

  2. Какие типы ограничений вы знаете?

  3. Что такое ограничение домена?.

  4. Дайте определение ограничению сущности.

  5. Какие правила именования ограничений вы знаете?

  6. Приведите пример ограничения primary key.

  7. Приведите пример ограничения foreign key.

  8. Приведите пример таблицы, ссылающейся на саму себя.

  9. Приведите пример ограничения unique.

  10. Приведите пример ограничения check.

  11. Приведите пример ограничения default.

Лабораторная работа №8 Транзакции, пакеты и блокировки.

1 Цель и порядок работы

1.1 Цель работы

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

1.2 Порядок выполнения работы

  • Ознакомиться с описанием работы;

  • Выполнить задание для самостоятельной работы;

  • Ответить на контрольные вопросы;

  • Представить результаты работы преподавателю.

2. Общие сведения

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

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

UPDATE accounts SET AccSum = AccSum - 1000 WHERE AccNumber = 12345;

UPDATE accounts SET AccSum = AccSum + 1000 WHERE AccNumber = 67890;

Что будет, если первый оператор выполнится, а второй по какой-то причине - нет (сбой сервера, неправильный номер счета, переполнение... - мало ли какая может быть ошибка)? Деньги с одного счета списаны, а на другой не поступили...

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

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

Операторы управления транзакциями:

  • COMMIT

  • ROLLBACK

  • SAVEPOINT

  • ROLLBACK TO

  • SET TRANSACTION

Немного подробностей по каждому оператору.

  • COMMIT. Оператор COMMIT завершает транзакцию и делает любые выполненные в ней изменения постоянными. Освобождаются блокировки.

  • ROLLBACK. Оператор отката завершает транзакцию и отменяет все выполненные в ней и незафиксированные изменения. Для этого он читает информацию из сегментов отката и восстанавливает блоки данных в состояние, в котором они находились до начала транзакции. Освобождаются блокировки.

Стандартный синтаксис этих команд очень прост(рисунок №73):

Рисунок №73- Операторы COMMIT и ROLLBAC

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

  • SAVEPOINT. Позволяет создать в транзакции точку сохранения. В одной транзакции можно выполнять оператор SAVEPOINT несколько раз, устанавливая несколько точек сохранения. Точки сохранения позволяют устанавливать маркеры внутри транзакции таким образом, чтобы была возможность отмены только части работы, проделанной в транзакции. Оправдано использование точек сохранения в продолжительных и сложных транзакциях. ORACLE освобождает блокировки, которые были установлены отменённым оператором.

  • ROLLBACK TO <точка сохранения>. Этот оператор используется совместно с представленным выше оператором SAVEPOINT. Транзакцию можно откатить до указанной точки сохранения, не отменяя все сделанные до нее изменения. Таким образом, можно выполнить два оператора UPDATE, затем — оператор SAVEPOINT, а после него — два оператора DELETE. При возникновении ошибки или исключительной ситуации в ходе выполнения операторов DELETE транзакция будет откатываться до указанной оператором SAVEPOINT точки сохранения; при этом будут отменяться операторы DELETE, но не операторы UPDATE.

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

Синтаксис операторов SAVEPOINT и ROLLBACK в Oracle показан на рисунке №74:

Рисунок №74 - Операторы ROLLBACK и SAVEPOINT в Oracle