powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / понятие транзакции. просьба разъяснить.
25 сообщений из 74, страница 1 из 3
понятие транзакции. просьба разъяснить.
    #39679515
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый всем день.

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

Как известно транзакция задает последовательность инструкций языка Transact-SQL, применяемую для объединения в один пакет операций чтения и записи для того, чтобы система базы данных могла обеспечить согласованность данных. (откопипастил первое попавшееся определение)
сразу вопрос что подрумянивается под инструкциями ?

к примеру есть несколько инсертов.

insert
insert
insert


Вопрос: тут что будет являться транзакцией каждый такой insert или же весь блок с инсертами или что иное или же пример не подходит (тогда большая просьба дать свой пример) ?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679521
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такой блок будет одной транзакцией:

begin tran
insert
insert
insert
commit tran
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679523
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Как известно транзакция задает последовательность инструкций языка Transact-SQL, применяемую для объединения в один пакет операций чтения и записи для того, чтобы система базы данных могла обеспечить согласованность данных. (откопипастил первое попавшееся определение)
сразу вопрос что подрумянивается под инструкциями ?Под инструкцией подразумевается любая команда доступа к данным.

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

andron81к примеру есть несколько инсертов.

insert
insert
insert


Вопрос: тут что будет являться транзакцией каждый такой insert или же весь блок с инсертами или что иное Если этот блок выполнялся в общей транзакции, то весь блок, и даже инструкции потом (время и объём транзакции не ограничены), а если общий транзакции нет, и если не задан режим автоначала транзакции, то каждая инструкция будет выполняться в своей транзакции.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679524
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoтакой блок будет одной транзакцией:

begin tran
insert
insert
insert
commit tranИли такой:
insert
insert
insert
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679533
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgL_argoтакой блок будет одной транзакцией:

begin tran
insert
insert
insert
commit tranИли такой:
insert
insert
insert
это 3 транзакции, а не 1
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679539
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo,

спасибо за ответы :)
тогда следующий вопрос :

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @newname varchar (255)
declare @oldname varchar (255)

set @oldname='ИП Афанасьев'
set @newname='ИП Луч'

BEGIN TRANSACTION
update BOOK_PURCH1 set CONTRACTOR = @newname where CONTRACTOR = @oldname
update BOOK_SALES2 set CONTRACTOR = @newname where CONTRACTOR = @oldname
update BOOK_SALES3 set CONTRACTOR = @newname where CONTRACTOR = @oldname
update BOOK_SALES4 set CONTRACTOR = @newname where CONTRACTOR = @oldname
IF @@ERROR = 0
begin
COMMIT
SELECT 'всё хорошо'
end
ELSE
begin
ROLLBACK 
SELECT 'всё плохо'
end



тут у меня и недопонимания. если конфликт произойдет скажем на третьем апдейте , то что произойдет ?
откатятся первый и второй - вряд ли ....

как должен выглядеть код исходя из определений транзакции и атомарности ?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679545
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

@@ERROR только на последнюю инструкцию

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-2017
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679546
Фотография Ken@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679562
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

почитай ещё про SET XACT_ABORT {ON|OFF}
Всё откатится при ошибке, если этот параметр равен ON.
В предыдущих версиях по умолчанию Microsoft его устанавливал зачем-то в OFF.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679573
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

да нет. я всё это почитаю , конечно . спасибо.
как правильно сделать я догадываюсь
Я хочу прояснить это для себя.
просто я не пойму : вот есть определение транзакции, атомарности.
четко и ясно написано : набор команд который рассматривается как единое целое кот. может выполнится , а может нет - в последнем случае откат.
но почему я должен в этом случае юзать всякие велосипеды типа @@ERROR или вот catch ??
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679580
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123alexeyvgпропущено...
Или такой:
insert
insert
insert
это 3 транзакции, а не 1С чего это, если установлена опция автоначала транзакции?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679581
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandron81,

@@ERROR только на последнюю инструкцию

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-2017

так в этом то и суть. с чего вообще @@ERROR этот нужен ? определение транзакции это набор инструкций которые совершают модификацию с б.д. (insert, update, delete). какие там проверки на @@ERROR ? :)
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679585
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81TaPaKandron81,

@@ERROR только на последнюю инструкцию

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-2017

так в этом то и суть. с чего вообще @@ERROR этот нужен ? определение транзакции это набор инструкций которые совершают модификацию с б.д. (insert, update, delete). какие там проверки на @@ERROR ? :)\
есть люди, которые предпочитают управлят такими вещами как откаты и тп
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679586
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandron81пропущено...


так в этом то и суть. с чего вообще @@ERROR этот нужен ? определение транзакции это набор инструкций которые совершают модификацию с б.д. (insert, update, delete). какие там проверки на @@ERROR ? :)\
есть люди, которые предпочитают управлят такими вещами как откаты и тп

тогда и определение транзакций должно быть другим . имхо ))))
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679588
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81да нет. я всё это почитаю , конечно . спасибо.
как правильно сделать я догадываюсь
Я хочу прояснить это для себя.Предыдущие ответы как раз описывают, что произойдёт, т.к. это зависит от настроек сервера и коннекта.
andron81просто я не пойму : вот есть определение транзакции, атомарности.
четко и ясно написано : набор команд который рассматривается как единое целое кот. может выполнится , а может нет - в последнем случае откат.
но почему я должен в этом случае юзать всякие велосипеды типа @@ERROR или вот catch ??Потому что разные варианты обработки не нарушают эту целостность и атомарность.

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

Если же вы рассмотрите транзакцию как команду перевода сервера (коннекта) в некий статус, то всё встанет на свои места.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679591
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgYasha123пропущено...

это 3 транзакции, а не 1С чего это, если установлена опция автоначала транзакции?
авто_кто установлен?
---
наверное с того, что если кто-то использует что-то, отличное от общепринятых умолчаний,
то об этом надо сообщать?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679592
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81определение транзакции это набор инструкций которые совершают модификацию с б.д. (insert, update, delete). какие там проверки на @@ERROR ? :)Нет, это не так, и важно, что сделать так принципиально неосуществимо.

Потому что нет "набора инструкций" для сервера, если команды, которые по очереди передаются по сети в сервер.
А вы при этом управляете статусом.

Например, в вашем примере
Код: sql
1.
2.
3.
4.
5.
6.
BEGIN TRANSACTION
update BOOK_PURCH1 set CONTRACTOR = @newname where CONTRACTOR = @oldname
update BOOK_SALES2 set CONTRACTOR = @newname where CONTRACTOR = @oldname
update BOOK_SALES3 set CONTRACTOR = @newname where CONTRACTOR = @oldname
update BOOK_SALES4 set CONTRACTOR = @newname where CONTRACTOR = @oldname
COMMIT TRANSACTION


Скажем, BOOK_SALES2 завершилось неудачно, с ошибкой.

Помня о том, что транзакция - это некое состояние, можем ли мы продолжить обновлять BOOK_SALES3 и 4 в той же транзакции? Да, можем, почему бы и нет, если нам это нужно.

Но если не хотим такого поведения, то режим SET XACT_ABORT ON может откатить транзакцию и завершить весь батч.

В общем, всё достаточно гибко и управляемо.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679593
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123alexeyvgпропущено...
С чего это, если установлена опция автоначала транзакции?
авто_кто установлен?
---
наверное с того, что если кто-то использует что-то, отличное от общепринятых умолчаний,
то об этом надо сообщать?Наверное, не надо обобщённо утверждать, что если нет стейтмента BEGIN TRANSACTION, то три инсёрта будут тремя разными транзакциями
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679599
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgСкажем, BOOK_SALES2 завершилось неудачно, с ошибкой.

Помня о том, что транзакция - это некое состояние, можем ли мы продолжить обновлять BOOK_SALES3 и 4 в той же транзакции? Да, можем, почему бы и нет, если нам это нужно.


да, почему бы и нет. допускаю, что это не нарушает определение транзакции. Но в этом случае дойдя до конца, мы всё равно должны сделать откат. иначе нарушается условие атомарности.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679602
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81alexeyvgСкажем, BOOK_SALES2 завершилось неудачно, с ошибкой.

Помня о том, что транзакция - это некое состояние, можем ли мы продолжить обновлять BOOK_SALES3 и 4 в той же транзакции? Да, можем, почему бы и нет, если нам это нужно.


да, почему бы и нет. допускаю, что это не нарушает определение транзакции. Но в этом случае дойдя до конца, мы всё равно должны сделать откат. иначе нарушается условие атомарности.
я так понимаю вы оглавление в книге по sql прочитали, дальше не приступали?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679603
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgYasha123пропущено...

авто_кто установлен?
---
наверное с того, что если кто-то использует что-то, отличное от общепринятых умолчаний,
то об этом надо сообщать?Наверное, не надо обобщённо утверждать, что если нет стейтмента BEGIN TRANSACTION, то три инсёрта будут тремя разными транзакциями
а я где-то такое утверждаю?
я вообще не спрашиваю, есть ли у вас BEGIN TRAN,
может есть строкой выше, и вы его не показываете из вредности.

я утверждаю, что написанный вами код, это 3 транзакции.
а если это лишь кусок кода, то уж простите, ваши проблемы, что вы не показали BEGIN TRAN
или SET IMPLICIT_TRANSACTIONS ON
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679605
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandron81пропущено...


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


у меня книга одна , она вообще дебильная . по их определению и "select * from table" это тоже является транзакцией. стоит ли читать такую книгу ?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679615
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, ну вы сначала прочитали данные, на их основе сделали какие-то подсчеты, потом пытаетесь внести изменения, а тут бац, ваш select выдает уже совершенно другие данные...
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679618
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRS544andron81, ну вы сначала прочитали данные, на их основе сделали какие-то подсчеты, потом пытаетесь внести изменения, а тут бац, ваш select выдает уже совершенно другие данные...

это к чему ? не могу уловить
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679619
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81KRS544andron81, ну вы сначала прочитали данные, на их основе сделали какие-то подсчеты, потом пытаетесь внести изменения, а тут бац, ваш select выдает уже совершенно другие данные...

это к чему ? не могу уловить
он тоже только оглавление прочитал
...
Рейтинг: 0 / 0
25 сообщений из 74, страница 1 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / понятие транзакции. просьба разъяснить.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]