SQL Server: операторы против пакетов, транзакций и соединений


10

Мой вопрос прост: каковы различия / сходства / кардинальности между

  • операции
  • Порции
  • Соединения и
  • Заявления

в SQL Server?

Насколько я понимаю, соединение представляет собой единый канал связи между экземпляром SQL Server и клиентом, в котором выполняются наборы операторов, сгруппированные в виде пакетов. Пакет либо неявно, либо явно отображается на одну или несколько транзакций. Это правильно?


Ответы:


4

Довольно много.

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

Насколько мне известно, SQL Server использует пул соединений, поэтому я бы не стал полагаться на одно соединение для каждой идеи клиента.


1
Так в чем же кардинальность между партией и транзакцией? Можно ли иметь несколько пакетов на транзакцию? Как насчет наоборот?

1
Насколько мне известно, возможно иметь несколько транзакций на пакет, но невозможно иметь несколько пакетов на транзакцию.
Cromulent

5

Транзакции и Пакеты - это две независимые концепции. Оба могут быть использованы в конфигурации один ко многим.

Блоки транзакций - это единая «единица работы», концепция, согласно которой совершенный sql должен либо полностью работать, либо не работать вообще. Например, если вы обновите две таблицы, связанные друг с другом; оба должны быть успешными, чтобы изменение данных было зафиксировано. [ https://msdn.microsoft.com/en-us/library/ms174377.aspx]

Пакет - это концепция Microsoft. С инструментами, созданными Microsoft, такими как sqlcmd и osql, пакет просто обеспечивает единый план выполнения. Например, если вы создаете переменную и используете ее вне пакета, инструмент выдаст ошибку. [ https://msdn.microsoft.com/en-us/library/ms188037.aspx]

Таким образом, вы можете иметь несколько пакетов, которые обновляют несколько таблиц внутри одного блока транзакции. Насколько они не нарушают отдельные планы выполнения партии, то есть.

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

Соединение - это просто рукопожатие связи, которое одобряет запуск запросов на сервере.

Заявления - это отдельные строки, формирующие запрос. GO (разделитель пакетов T-Sql) и BEGIN TRANSACTION (ANSI SQL для запуска нового блока транзакции) являются операторами.


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.