Язык Transact-SQL

Подкатегории

Хранимые процедуры и функции, определенные пользователем

В этом разделе вводятся описания пакетов и подпрограмм. Пакеты являются последовательностью операторов Transact-SQL и процедурных расширений. Подпрограммы могут быть либо хранимыми процедурами, либо функциями, определенными пользователем (User Defined Function, UDF). В начале главы вводятся все процедурные расширения, поддерживаемые Database Engine. После этого процедурные расширения используются вместе с операторами Transact-SQL, чтобы продемонстрировать, как могут быть реализованы пакеты. Пакет может быть сохранен как объект базы данных в виде хранимой процедуры или UDF. Одни процедуры написаны пользователями, другие предоставляются корпорацией Microsoft, они называются системными хранимыми процедурами. В отличие от пользовательских хранимых процедур функции, написанные пользователем, возвращают вызвавшей программе некоторое значение. Все подпрограммы могут быть написаны либо на Transact-SQL, либо на любом языке программирования, таком как С# или Visual Basic.

Просмотреть материалы...

Система безопасности Database Engine

Этот раздел начинается с краткого обзора наиболее важных концепций безопасности базы данных. Затем обсуждаются специфические особенности системы безопасности Database Engine. Аутентификация требует ответа на следующий вопрос: «Имеет ли этот пользователь легитимные права на доступ в систему?» Следовательно, эта концепция безопасности задает процесс проверки полномочий для предотвращения использования системы неавторизованными пользователями.

Просмотреть материалы...

Управление параллельной работой

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

Просмотреть материалы...

Системный каталог

В этом разделе рассматривается системный каталог Database Engine. За общими сведениями следует описание представлений для просмотра структуры некоторых каталогов; представления позволяют вам просматривать метаданные. В начале главы также рассматривается использование динамически управляемых представлений и динамически управляемых функций. А затем обсуждаются четыре альтернативных способа поиска информации метаданных: системные хранимые процедуры, системные функции, функции свойств и информационная схема.

Просмотреть материалы...

Индексы

В этом разделе описываются индексы и их роль в оптимизации времени отклика запросов. В первой части главы рассматриваются вопросы хранения индексов и существующие для этого формы. В основном глава содержит описание трех операторов Transact-SQL, имеющих отношение к индексам: create index, alter index и drop index. После этого рассматривается фрагментация индексов и ее влияние на производительность системы. Затем приводятся некоторые общие рекомендации по созданию индексов.

Просмотреть материалы...

Представления – View

Этот раздел посвящена исключительно объектам базы данных, называемым представлениями (view). Структура этой главы соответствует структуре, в которых были описаны операторы DDL и DML для базовых таблиц. В первом разделе этой главы рассматриваются операторы DDL, связанные с представлениями: create view, alter view и drop view. Затем описываются операторы DDL для представлений: select, insert, update и delete. Оператор select будет рассмотрен отдельно от других трех операторов. В отличие от базовых таблиц представления не могут быть использованы для операций модификации без некоторых ограничений.

Просмотреть материалы...

Триггеры

Этот раздел посвящен механизму, называемому триггерами. В начале главы описываются операторы Transact-SQL для создания, удаления и изменения триггеров. После этого даются примеры из различных областей приложений для этого объекта базы данных. Каждый пример создается с использованием одного из операторов insert, update или delete. Во второй части этой главы рассматриваются триггеры DDL, которые базируются на таких операторах, как create table. Опять же, даются примеры из различных областей приложений, связанных с триггерами DDL.

Просмотреть материалы...

Основные элементы SQL

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

Просмотреть материалы...

Язык описания данных

Этот раздел описывает все операторы Transact-SQL, связанные с языком определения данных DDL (Data Definition Language). Операторы DDL разделены на три группы, которые рассматриваются по порядку. Первая группа включает операторы, которые создают объекты, вторая группа включает операторы, которые изменяют структуру объектов, а третья группа включает операторы, которые удаляют объекты базы данных.

Просмотреть материалы...

Запросы к базе данных

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

Просмотреть материалы...

Изменение содержимого таблиц

В дополнение к оператору select, который был описан, существуют три других оператора DML: insert, update и delete. Как и оператор select, эти три оператора модификации оперируют либо таблицами, либо представлениями. В данной главе обсуждаются эти операторы в работе с таблицами и даются примеры их использования. Дополнительно рассматриваются два других оператора: truncate table и merge. В то время как оператор truncate table является расширением в языке Transact-SQL стандарта SQL, оператор merge - новая и стандартизованная возможность в SQL Server 2008.

Просмотреть материалы...
Оценить
(0 голоса)
Подсказки блокировки задают тип блокировки, используемый Database Engine для блокировки данных таблицы. Подсказки блокировки на уровне таблицы могут быть использованы, когда запрашивается точная регулировка типов блокировки для требуемого ресурса. (Подсказки блокировки перекрывают текущий уровень изоляции транзакции для данной сессии.) Все подсказки блокировки записываются как часть предложения from в операторе select. Вы можете использовать следующие подсказки блокировки: ♦ updlock устанавливает блокировку обновлений для каждой строки таблицы в процессе операций чтения. Все блокировки обновлений сохраняются до завершения транзакции; ♦ tab lock (tablockx) устанавливает разделяемую (или исключительную) блокировку таблицы для всей таблицы. Все блокировки сохраняются до завершения транзакции; ♦ rowlock заменяет существующую разделяемую…
Оценить
(0 голоса)
Опция locktimeout оператора set может быть использована для задания количества миллисекунд, в течение которых транзакция будет ожидать снятия блокировки. Значение - (значение по умолчанию) указывает на отсутствие времени ожидания, иными словами, транзакция вообще не будет ожидать. Подсказка блокировки readpast предоставляет альтернативу этой опции set.
Оценить
(0 голоса)
Информация о блокировке может быть отображена либо при использовании системной процедуры spiock, либо динамически управляемым представлением, называемым sys.dmtraniocks. Поскольку sp_iock является не рекомендуемым средством и не будет поддерживаться в следующих версиях SQL Server, в этом разделе описывается только представление sys.dm_ tran_ locks. Представление sys.dm_tran_iocks возвращает информацию о текущей активной блокировке менеджера ресурсов. Каждая строка отображает активный в настоящий момент запрос на блокировку, которая была предоставлена или предоставление которой ожидается. Столбцы этого представления соответствуют двум группам: ресурсам и запросам. Группа ресурсов описывает ресурсы, которым предоставлена блокировка на основании запросов, а группа запросов описывает запросы на блокировку. Наиболее важными столбцами этого представления…
Оценить
(0 голоса)
Взаимная блокировка является особой проблемой одновременной работы с базой данных, при которой две транзакции блокируют выполнение друг друга. Первая транзакция имеет блокировку на некоторый объект базы данных, к которому другая транзакция ожидает доступа, и наоборот. (Обычно несколько транзакций могут вызвать взаимную блокировку, когда они создают циклические зависимости.) В примере 13.5 показана ситуация взаимной блокировки между двумя транзакциями.     Если обе транзакции в примере 13.5 будут выполняться в одно и то же время, возникнет взаимная блокировка, и система вернет следующее сообщение: Server: Msg 1205, Level 13, State 45 Transaction (Process id 56) was deadlocked with another process and has been…
Оценить
(0 голоса)
В теории каждая транзакция должна быть полностью изолирована от всех других транзакций. Однако в подобном случае объем доступных данных значительно сокращается, потому что операции чтения в транзакции блокируются операциями записи в других транзакциях, и наоборот. Если доступность данных является важным требованием, это свойство должно быть ослаблено с использованием уровней изоляции. Уровни изоляции задают степень, в которой отыскиваемые в транзакции данные будут защищены от изменений в других транзакциях. Прежде чем начать рассмотрение существующих уровней изоляции, в следующем разделе мы вкратце рассмотрим сценарии, которые могут возникнуть при отсутствии блокировок и, следовательно, не существует никакой изоляции между транзакциями.
Оценить
(0 голоса)
Если не используется блокировка и, следовательно, не существует изоляции между транзакциями, то могут возникнуть следующие четыре проблемы: ♦ потеря обновлений; ♦ грязное чтение (обсуждавшееся в разд. «Блокировка» ранее); ♦ неповторяемое чтение; ♦ фантомные записи. Проблема потери обновлений при одновременном доступе появляется, когда не существует изолированности одной транзакции от всех других транзакций. Это означает, что несколько транзакций могут читать одни и те же данные и изменять их. Изменения данных, выполненные всеми транзакциями за исключением транзакции, выполнившей эти изменения последней, будут потеряны. Проблема неповторяемого чтения при одновременном доступе появляется, когда один процесс читает данные несколько раз, а другой процесс изменяет те же…
Оценить
(0 голоса)
Используя уровни изоляции, вы можете определить, какие проблемы конкурентного доступа могут появиться, а каких можно избежать. Database Engine поддерживает следующие пять уровней изоляции, которые управляют тем, как будут выполнены ваши операции чтения данных: ♦ read uncommitted; ♦ read committed; ♦ repeatable read; ♦ serializable; ф snapshot. Уровни изоляции read uncommitted, repeatable read и serializable доступны только в пессимистической модели конкурентного доступа, в то время как уровень snapshot доступен только в оптимистической модели конкурентного доступа. Уровень изоляции read committed доступен в обеих моделях. Далее описываются четыре уровня изоляции, которые доступны в пессимистической модели конкурентного доступа. Уровень snapshot описывается в разд. «Контроль…
Оценить
(0 голоса)
Уровень изоляции read uncommitted предоставляет наипростейшую форму изоляции транзакций, потому что он вообще не изолирует операции чтения других транзакций. Когда транзакция этого уровня изоляции отыскивает строку, она не запрашивает блокировки и не признает никаких существующих блокировок. Данные, которые читаются этой транзакцией, могут быть несогласованными. В этом случае транзакция читает данные, которые были изменены какой-нибудь другой активной транзакцией. Если для второй транзакции позже будет выполнен откат, то значит, что первая транзакция прочла данные, которые никогда реально не существовали. Из четырех проблем одновременного доступа к данным, рассмотренных в предыдущем разделе, read uncommitted допускает грязное чтение, неповторяемое чтение и фантомные записи.
Оценить
(0 голоса)
Как вы уже знаете, уровень изоляции read committed имеет две формы. Первая форма применяется для пессимистической модели конкурентного доступа, а вторая форма - для оптимистической модели конкурентного доступа. В этом разделе рассматривается первая форма. Вторая форма read committed snapshot обсуждается в разд. «Контроль версий строк» далее В этом разделе. Транзакция, которая читает строку и использует уровень изоляции read committed, проверяет только лишь, установлена ли исключительная блокировка на эту строку. Если такая блокировка отсутствует, транзакция загружает строку. (Это выполняется при использовании разделяемой блокировки.) Это действие не дает транзакции возможности читать неподтвержденные изменения данных, которые впоследствии могут быть отменены. После чтения значений…
Оценить
(0 голоса)
В отличие от уровня изоляции read committed уровень изоляции repeatable read устанавливает разделяемую блокировку на все данные, которые читаются, и сохраняет эту блокировку, пока транзакция не будет подтверждена или отменена. Следовательно, в этом случае выполнение запроса несколько раз внутри транзакции всегда вернет один и тот же результат. Недостатком такого уровня изоляции является то, что одновременный доступ ухудшается, потому что временной интервал, в течение которого другие транзакции не могут обновлять те же данные, значительно больше, чем в случае read committed. Этот уровень изоляции не запрещает другим транзакциям добавлять новые строки, которые появляются в последующих чтениях, следовательно, могут появиться фантомные записи.
© 2018 www.serversql.ru. Все права защищены.