71186

Транзакции

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2014-11-03

496.74 KB

4 чел.

Лабораторные работы по дисциплине «Управление данными»

Лабораторной работе №6

Транзакции.

Транзакция – это последовательность  операторов SQL, выполняющихся как единая операция, которая не прерывается другими клиентами.

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

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

SET AUTOCOMMIT=0;

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

 SET AUTOCOMMIT=1;  

  1.  Создайте базу данных lab_6 и таблицу catalogs с полями Id и Name.

CREATE database lab_6;

USE lab_6;

CREATE table catalogs(

ID int,

NAME varchar(80));

  1.  Попробуйте выполнить следующий запрос.

SET AUTOCOMMIT = 0;

INSERT INTO catalogs VALUES(NULL, 'Переферия');

INSERT INTO catalogs VALUES(NULL, 'Разное');

SELECT * FROM catalogs;

ROLLBACK;

  1.  А теперь вновь посмотрите, что осталось в базе данных

SELECT * FROM catalogs;

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

4.1. В текущем окне выполните снова (окно №1)

INSERT INTO catalogs VALUES(NULL, 'Переферия');

INSERT INTO catalogs VALUES(NULL, 'Разное');

SELECT * FROM catalogs;

4.2. А в новом окне (окно №2)

SELECT * FROM lab_6.catalogs;

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

  1.  Примите сделанные изменения в окне №1 выполнив:

COMMIT;

  1.  Проверьте, что изменилось для сессии №2.

SELECT * FROM lab_6.catalogs;

  1.  Перейдите к окну №1 и обратно включите режим автоматического завершения транзакций:

 SET AUTOCOMMIT=1;

  1.  Проверим, что режим автоматического завершения транзакций снова работает. Выполним в окне №1:

INSERT INTO catalogs VALUES(NULL, 'Видеокарты');

SELECT * FROM catalogs;

 Выполним в окне №2:

SELECT * FROM catalogs;

  1.  Это был один из способов осуществления транзакций,  можно  поступить по – другому, с помощью команды START TRANSACTION; которая временно отменяет автоматическое завершения транзакций, до тех пор пока пользователь введет команду COMMIT или ROLLBACK.

Выполните код:

 START TRANSACTION;

INSERT INTO catalogs VALUES(NULL, 'Процессоры');

INSERT INTO catalogs VALUES(NULL, 'Оперативная память');

SELECT * FROM catalogs;

  1.  Изменения будут приняты тоже только после выполнения команды COMMIT; Однако после этой команды режим автоматического завершения транзакций снова активен. Проверим так ли это. Выполните в окне №1.

COMMIT;

INSERT INTO catalogs VALUES(NULL, 'Жесткие диски');

Проверьте содержимое таблицы в окне №2

SELECT * FROM lab_6.catalogs;

 

Для некоторых операторов нельзя выполнить откат при помощи оператора ROLLBACK.

К их числу относят

  1.  CREATE INDEX,
  2.  DROP INDEX,
  3.  CREATE TABLE,
  4.  DROP TABLE,
  5.  ALTER TABLE,
  6.  CREATE DATABASE,
  7.  DROP DATABASE и др.

Следует избегать помещать их в транзакции с другими операторами.

Кроме того транзакции не могут быть вложенными. Это связано с тем, что любой оператор, начинающий транзакцию, приводит к завершению предыдущей транзакции.

Изолированность транзакций

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

  1.  упорядочение (serializabie);
  2.  повторяемое чтение (repeatable read);
  3.  чтение подтвержденного (read committed);
  4.  чтение неподтвержденного (read uncommitted).

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

Упорядочение (serializabie) — это идеал с точки зрения чистоты и устойчивости. С упорядочением чтение и запись в базе данных должны казаться выполняющимися по очереди, когда записываемые изменения вносятся полностью до начала последующего чтения. При этом транзакции не всегда будут выполняться в неперемежающейся последовательности — многие транзакции не мешают одна другой, но в случае коллизии будут мешать. Блокировка и ожидание вместе с непроизводительными усилиями на предсказание возможных коллизий превращают упорядочение в самый медленный режим изолированности. Если вы захотите использовать этот режим, воспользуйтесь следующей командой:

set transaction isolation level serializable;

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

Если вызвать

select * from account where number=l;

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

select * from account where balance>1000;

то вполне возможно, что во второй раз вы получите новые строки — фантомные.

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

set transaction isolation level repeatable read;

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

set transaction isolation level read committed;

На самом слабом уровне изолированности, в режиме чтения неподтвержденного (read uncommitted), очевидно уже не только то, что транзакции больше не изолированы, не обеспечивают целостность и, таким образом, соответствие ACID, но и то, что транзакций по сути вообще иметь невозможно. В этом режиме транзакции могут читать изменения, которые вносят другие транзакции, до того, как эти изменения  будут подтверждены (т.е. зафиксированы). Это называют "грязным " чтением. Вы можете допустить это только при исключительно необычных условиях, например, когда вы знаете, что все активные потоки будут либо только читать, либо только записывать данные, но не то и другое одновременно. Чтобы установить режим чтения неподтвержденного, используйте следующую команду:

set transaction isolation level read uncommitted;


 

А также другие работы, которые могут Вас заинтересовать

40831. АППРОКСИМАЦИЯ ФУНКЦИЙ 939 KB
  Как упростить вычисление известной функции fx или же ее характеристик если fx слишком сложная Ответы на эти вопросы даются теорией аппроксимации функций основная задача которой состоит в нахождении функции y=x близкой т. Обоснование способов нахождения удачного вида функциональной зависимости и подбора параметров составляет задачу теории аппроксимации функций. В зависимости от способа подбора параметров получают различные методы аппроксимации; наибольшее распространение среди них получили интерполяция и среднеквадратичное...
40832. ВЫЧИСЛЕНИЕ ПРОИЗВОДНЫХ И ИНТЕГРАЛОВ 654 KB
  При аппроксимации операторов численного дифференцирования и интегрирования наибольшее распространение ввиду своей простоты нашли интерполяционные формулы Ньютона. Формулы численного дифференцирования Формулы для расчета производной в точке x получаются следующим образом. Такие формулы называют простейшими формулами численного дифференцирования.3 получается три важные формулы второго порядка точности: 4.
40833. МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ УРАВНЕНИЙ 748 KB
  Точное решение удается получить в исключительных случаях и обычно для нахождения корней уравнения применяются численные методы. Первая задача решается графическим методом: на заданном отрезке [ b] вычисляется таблица значений функции с некоторым шагом h строится ее график и определяются интервалы длиной h на которых находятся корни.1 в случаях и в значение корня совпадает с точкой экстремума функции и для нахождения таких корней можно использовать методы поиска минимума функции описанные в...
40834. МЕТОДЫ НАХОЖДЕНИЯ МИНИМУМА ФУНКЦИИ ОДНОЙ ПЕРЕМЕННОЙ 869.5 KB
  Постановка задачи Задача нахождения минимума функции одной переменной minfx нередко возникает в практических приложениях. Кроме того многие методы решения задачи минимизации функции многих переменных сводятся к многократному поиску одномерного минимума. Задача ставится следующим образом: требуется найти такое значение xm из отрезка [ b] при котором достигается минимум функции ym=fxm т.
40835. Президенти Міжнародного олімпійського комітету 165 KB
  Президенти Міжнародного олімпійського комітету МОК План лекції 1. Президенти МОК: основні моменти біографії та вплив діяльності на зміни в олімпійському русі: Д. Відповідно до Олімпійської хартії затвердженої на цьому конгресі президент МОК мав представляти країну що проводить чергові Олімпійські ігри. Вікелас у віці 59 років був обраний першим президентом МОК.
40836. Соціально-політичні і правові аспекти сучасного олімпійського спорту 79 KB
  З підвищенням рівня популярності і міжнародної ваги Олімпійських ігор останні виявилися ареною суперництва не тільки самих спортсменів і навіть не тільки їх національних збірних але держав і груп держав за світове визнання і вплив. Одним з неминучих следствій що розвернулася і продовжувалася до цього дня навколо і усередині Олімпійських ігор міждержавної політичної боротьби стали і різні способи публічної демонстрації відношення до тих або інших держав або груп держав. Це може бути демонстративна відмова в ході підготовки і проведення...
40837. Менеджмент та оптимізація структури капіталу підприємства 106 KB
  Менеджмент та оптимізація структури капіталу підприємства 1. Особливості руху капіталу підприємства Під загальним поняттям капітал підприємства розуміють такі його види що характеризуються в даний час декількома десятками термінів. Розглянемо більш докладно окремі види капіталу підприємства відповідно до основних класифікаційних ознак. Ця частина активів сформована за рахунок інвестованого в них власного капіталу являє собою чисті активи підприємства.
40838. Значення і місце аеробіки в системі фізичного виховання 51.5 KB
  Значення і місце аеробіки в системі фізичного виховання. Особливості оздоровчої аеробіки як виду фізкультурноспортивної діяльності. Класифікація видів оздоровчої аеробіки. Особливості оздоровчої аеробіки як виду фізкультурноспортивної діяльності.
40839. Особливості проведення занять з оздоровчого фітнесу (базова аеробіка) 51 KB
  Розминка. Розминка має велике значення, але, на жаль її часто ігнорують, результатом чого є розтягування м'язів. В розминки дві мета: по-перше, розігріти м'язи спини і кінцівок; по-друге, викликати деяке прискорення темпу сердечних прискорень так, щоб плавно підвищувати пульс до значень, відповідних аеробній фазі.