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

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

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

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

insert
insert
insert


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

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

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

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

insert
insert
insert


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

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

begin tran
insert
insert
insert
commit tranИли такой:
insert
insert
insert
это 3 транзакции, а не 1
...
Рейтинг: 0 / 0
26.07.2018, 12:23
    #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
26.07.2018, 12:27
    #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
26.07.2018, 12:28
    #39679546
Ken@t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
понятие транзакции. просьба разъяснить.
...
Рейтинг: 0 / 0
26.07.2018, 12:38
    #39679562
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
понятие транзакции. просьба разъяснить.
andron81,

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

да нет. я всё это почитаю , конечно . спасибо.
как правильно сделать я догадываюсь
Я хочу прояснить это для себя.
просто я не пойму : вот есть определение транзакции, атомарности.
четко и ясно написано : набор команд который рассматривается как единое целое кот. может выполнится , а может нет - в последнем случае откат.
но почему я должен в этом случае юзать всякие велосипеды типа @@ERROR или вот catch ??
...
Рейтинг: 0 / 0
26.07.2018, 12:54
    #39679580
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
понятие транзакции. просьба разъяснить.
Yasha123alexeyvgпропущено...
Или такой:
insert
insert
insert
это 3 транзакции, а не 1С чего это, если установлена опция автоначала транзакции?
...
Рейтинг: 0 / 0
26.07.2018, 12:56
    #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
26.07.2018, 12:59
    #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
26.07.2018, 13:01
    #39679586
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
понятие транзакции. просьба разъяснить.
TaPaKandron81пропущено...


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

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

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

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

это 3 транзакции, а не 1С чего это, если установлена опция автоначала транзакции?
авто_кто установлен?
---
наверное с того, что если кто-то использует что-то, отличное от общепринятых умолчаний,
то об этом надо сообщать?
...
Рейтинг: 0 / 0
26.07.2018, 13:07
    #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
26.07.2018, 13:08
    #39679593
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
понятие транзакции. просьба разъяснить.
Yasha123alexeyvgпропущено...
С чего это, если установлена опция автоначала транзакции?
авто_кто установлен?
---
наверное с того, что если кто-то использует что-то, отличное от общепринятых умолчаний,
то об этом надо сообщать?Наверное, не надо обобщённо утверждать, что если нет стейтмента BEGIN TRANSACTION, то три инсёрта будут тремя разными транзакциями
...
Рейтинг: 0 / 0
26.07.2018, 13:15
    #39679599
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
понятие транзакции. просьба разъяснить.
alexeyvgСкажем, BOOK_SALES2 завершилось неудачно, с ошибкой.

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


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

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


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

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

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


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


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

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

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


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