Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Введение. SQL (Structured Query Language) - это универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных



SQL (Structured Query Language) - это универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных (язык структурированных запросов).

Однако, SQL в его исходном виде является информационно-логическим языком, а не языком программирования, но тем не менее SQL предусматривает возможность его процедурных расширений, с учётом которых язык уже вполне может рассматриваться в качестве языка программирования.

В настоящее время широко распространенны следующие процедурные расширения SQL:

Тип базы данных Процедурные расширения SQL
Microsoft SQL Transact–SQL
Microsoft Jet/Access Jet SQL
MySQL SQL/PSM (SQL/Persistent Stored Module)
Oracle PL/SQL (Procedural Language/SQL)
IBM DB2 SQL PL (SQL Procedural Language)
InterBase/Firebird PSQL (Procedural SQL)

Transact–SQL – это процедурное расширение языка SQL компаний Microsoft. SQL был расширен такими дополнительными возможностями как:

· локальные и глобальные переменные,

· управляющие операторы,

· различные дополнительные функции для обработки строк, дат, математики и т.п.,

Язык Transact–SQL является ключом к использованию SQL Server. Все приложения, взаимодействующие с экземпляром SQL Server, независимо от их реализации и пользовательского интерфейса, отправляют серверу инструкции Transact–SQL.


Глава 1. Транзакции.

Язык запросов Transact–SQL взял свое название от слова транзакция. Рассмотрим это понятие на примере. Допустим, что у нас есть таблица, содержащая как минимум два поля – номер счета в банке и сумма денег на этом счету.

R1([Номер счета], Баланс, …)

Нам необходимо перевести 100 единиц со счета «А123» на счет «Б123». Для этого нужно выполнить запрос, уменьшающий сумму первого счета на 100 единиц.

UPDATE R1 SET Баланс = Баланс - 100 WHERE [Номер счета]= ' A123 '

А затем, запрос увеличивающий значение второго счета.

UPDATE R1 SET Баланс = Баланс + 100 WHERE [Номер счета]= ' Б123 '

Все вроде бы хорошо. Но что произойдет, если после уменьшения первого счета произойдет сбой и сервер не успеет пополнить другой счет? Деньги уже сняты, но никуда не записаны, а значит, они пропали. Если выполнять операции в обратном порядке: сначала пополнять счет, а потом снимать деньги, то если снятие не успеет произойти, то банк может оказаться банкротом, ведь появляется лишняя сумма, снятия не происходит.

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

Концепция транзакций – неотъемлемая часть любой клиент-серверной базы данных.

Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операторов манипулирования данными (удаления, вставки, модификации), приводящая к одному из двух возможных результатов: либо последовательность выполняется, если все операторы правильные, либо вся транзакция откатывается, если хотя бы один оператор не может быть успешно выполнен. Обработка транзакций гарантирует целостность информации в базе данных. Таким образом, транзакция переводит базу данных из одного целостного состояния в другое.

Поддержание механизма транзакций – показатель уровня развитости СУБД. Корректное поддержание транзакций одновременно является основой обеспечения целостности БД, а также составляет основу изолированности в многопользовательских системах, где с одной БД параллельно могут работать несколько пользователей или прикладных программ.

При выполнении транзакции СУБД должна придерживаться определенных правил обработки набора команд, входящих в транзакцию (Atomicity, Consistency, Isolation, Durability (ACID) – неделимость, согласованность, изолированность, устойчивость).

ACID-свойства транзакций:

· Транзакция неделима в том смысле, что представляет собой единое целое. Все ее компоненты либо имеют место, либо нет. Не бывает частичной транзакции. Если может быть выполнена лишь часть транзакции, она отклоняется.

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

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

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

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





Дата публикования: 2015-09-17; Прочитано: 578 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...