Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд ответы.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
459.25 Кб
Скачать

35.Понятие и свойства транзакции.

Транзакция представляет собой последовательность операторов языка SQL, которая рассматривается как некоторое неделимое действие над базой данных. В то же время, это логическая единица работы системы. Понятие транзакции имеет непосредственное отношение к целостности БД. СУБД автоматически следит, чтобы каждая отдельная команда SQL не нарушала целостность БД. Существуют различные модели транзакций, которые могут быть классифицированы на основании различных свойств, включающих структуру транзакции, параллельность внутри транзакции, продолжительность и т.д. Чаще всего имеют в виду традиционные транзакции, характеризуемые четырьмя классическими свойствами: атомарности, согласованности, изолированности, долговечности (прочности) — ACID (Atomicity, Consistency, Isolation, Durability). Иногда традиционные транзакции называют ACID-транзакциями. Упомянутые выше свойства означают следующее.

1. Свойство атомарности выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе. 2. Свойство согласованности гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных.  3. Свойство изолированности означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто они выполняются параллельно. 4. Свойство долговечности трактуется следующим образом: если транзакция завершена успешно, то те изменения в данных, которые были ею произведены, не могут быть потеряны ни при каких обстоятельствах (даже в случае последующих ошибок).

Таким образом, возможны два варианта завершения транзакции. Если все операторы выполнены успешно, и в процессе выполнения транзакции не произошло никаких сбоев программного или аппаратного обеспечения, транзакция фиксируется.

36.Команды commit и rollback.

Оператор COMMIT( с его помощью фиксируем транзакцию) применяется для того, чтобы:

сделать «постоянными» все изменения, сделанные в текущей транзакции (реально данные могут быть изменены несколько позже)

очистить все точки сохранения данной транзакции

завершить транзакцию

освободить все блокировки данной транзакции

Пример Для добавления строки к таблице MyTable и сохранения изменения введите следующие команды:

BEGIN TRANSACTION;

INSERT INTO MyTable VALUES ('50', 'some string');

COMMIT WORK;

ROLLBACK (откат) — оператор языка SQL, который применяется для того, чтобы:

отменить все изменения, внесённые начиная с момента начала транзакции или с какой-то точки сохранения (SAVEPOINT).

очистить все точки сохранения данной транзакции

завершить транзакцию

освободить все блокировки данной транзакции

Замечания по использованию! Рекомендуется явно завершать транзакции в прикладных программах используя команды COMMIT WORK (или ROLLBACK WORK). Если Вы явно не записали транзакцию, а прикладная программа завершилась аварийно, последняя не записанная транзакция будет откачена.

Пример Для добавления записи к таблице MyTable и последующей отмены этого действия, введите следующие команды:

BEGIN TRANSACTION;

INSERT INTO MyTable VALUES ('50', 'some string');

ROLLBACK WORK;

Транзакция (англ. transaction) — в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. Транзакции обрабатываются транзакционными системами, в процессе работы которых создаётся история транзакций. Различают последовательные (обычные), параллельные и распределённые транзакции. Распределённые транзакции подразумевают использование больше чем одной транзакционной системы и требуют намного более сложной логики (например, two-phase commit — двухфазный протокол фиксации транзакции). Также, в некоторых системах реализованы автономные транзакции, или под-транзакции, которые являются автономной частью родительской транзакции.

После ROLLBACK, база данных восстанавливается - отменяются удаления, добавления и изменения в данных, как будто-бы с ней ничего и не делали. В противоположность этой команде, команда COMMIT окончательно подтверждает сохранение изменений.

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

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