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

дайте название книги где это всё нормально расписано. а то не знаю в какой почитать.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679651
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81у меня книга одна , она вообще дебильная . по их определению и "select * from table" это тоже является транзакциейВидимо для вас MSSQL будет "дебильным" сервером, ибо в нем любая инструкция, затрагивающая данные, выполняется в транзакции.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679654
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmandron81у меня книга одна , она вообще дебильная . по их определению и "select * from table" это тоже является транзакциейВидимо для вас MSSQL будет "дебильным" сервером, ибо в нем любая инструкция, затрагивающая данные, выполняется в транзакции.

то есть по вашему "select" затрагивает данные ?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679658
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81invmпропущено...
Видимо для вас MSSQL будет "дебильным" сервером, ибо в нем любая инструкция, затрагивающая данные, выполняется в транзакции.

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

я всегда считал, что select делает выборку, читает данные.
Тогда для пущей каши расскажите что будет результатом отката "select" ???
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679667
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123alexeyvgНаверное, не надо обобщённо утверждать, что если нет стейтмента BEGIN TRANSACTION, то три инсёрта будут тремя разными транзакциями
а я где-то такое утверждаю?Да, вот тут:
Yasha123я утверждаю, что написанный вами код, это 3 транзакции.
Ибо если включён SET IMPLICIT_TRANSACTIONS ON, то после первого инсёрта начнётся общая транзакция, в которой будет выполняться в том числе и третий инсёрт.
И вот тут не прокатывает "а если это лишь кусок кода, то уж простите, ваши проблемы", потому что это не кусок кода, а весь код, а статус IMPLICIT_TRANSACTIONS ON - это не код, а установка коннекта; возможно, все коннекты в системе имеют такую установку.

И более того, корректно будет считать это "полным кодом" при запуске такого батча из клиента, при том, что из клиента до этого выполнялись другие батчи,и, в частности, была начата транзакция.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679671
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

я может быть туплю, но я считал, что транзакция это инструкция которая вносит правки в б.д.
select - выборки которые не делают ничего в б.д.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679673
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81я всегда считал, что select делает выборку, читает данные.А читать это не затрагивать?
andron81Тогда для пущей каши расскажите что будет результатом отката "select" ???Чтобы избавиться от каши, начните с правильного определения транзакции. Например тут .
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679676
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Но в этом случае дойдя до конца, мы всё равно должны сделать откат. иначе нарушается условие атомарности.Я же вам говорю, условие атомарности не нарушится, потому что транзакция не декларативна.

Она не охватывает те операции, которые написаны программистом между begin и commit.

Те операции, которые были включены в транзакцию, можно подтвердить или откатить. А те, которые не были включены в транзакцию, не поменяли данные, и в транзакцию не включились, на неё не повлияли.

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

Но это неправильное определение.

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

а я где-то такое утверждаю?Да, вот тут:
Yasha123я утверждаю, что написанный вами код, это 3 транзакции.


и буду на этом настаивать.
ваш код НЕ содержит SET IMPLICIT_TRANSACTIONS ON.
а ведь вы его выполнили.
так что это все равно, что написать BEGIN TRY и не показать.

еще раз:
показанный вами код -- это 3(три) транзакции.
а все остальное лишь демагогия
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679683
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*** BEGIN TRY постом выше читать как BEGIN TRAN
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679687
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123и буду на этом настаивать.
ваш код НЕ содержит SET IMPLICIT_TRANSACTIONS ON.Да он вообще никаких SET не содержит, а они есть, потому что есть коннект, и при нём всегда есть SET-ы
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679688
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679689
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
link
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679703
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgYasha123и буду на этом настаивать.
ваш код НЕ содержит SET IMPLICIT_TRANSACTIONS ON.Да он вообще никаких SET не содержит, а они есть, потому что есть коннект, и при нём всегда есть SET-ы
и эти сеты дефолтные.
а чтобы это изменить, уж простите, сет вы выполнили в явном виде
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679797
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmandron81я всегда считал, что select делает выборку, читает данные.А читать это не затрагивать?
andron81Тогда для пущей каши расскажите что будет результатом отката "select" ???Чтобы избавиться от каши, начните с правильного определения транзакции. Например тут .

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

Вот он пишет :
Те операции, которые были включены в транзакцию, можно подтвердить или откатить. А те, которые не были включены в транзакцию, не поменяли данные, и в транзакцию не включились, на неё не повлияли. Не хотите ему ссылку эту дать?

Вот и ответьте теперь на мой ранний вопрос , что будет результатом отката select ?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679804
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81С чего вы взяли , что ваше определение по ссылке верное? А в вас встроен определятор верности определения транзакции? С чего вы вообще взяли, что обязательно есть какое-то одно правильное определение транзакции, а все остальные неверные?

И вообще, зачем вам это определение? Чтобы убедиться, что какая-та ваша книжка по какой-то там СУБД (если вообще по СУБД) -- г..но?

andron81Вот и ответьте теперь на мой ранний вопрос , что будет результатом отката select ?А что будет результатом отката delete ... where 1 = 0? Или delete это не всегда транзакция? А почему команда set transaction isolation level кардинальным образом влияет на поведение select?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679807
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и чтобы закончить спор, давайте узнаем, как считают разработчики MSSQL:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if @@trancount > 0
    rollback

set implicit_transactions on

select top 0 * from sys.sysobjects

select @@trancount

-----------
1
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679820
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Не надо так уж умничать тут. С чего вы взяли , что ваше определение по ссылке верное?Ну умничает тут, имхо, кто-то другой, пытаясь без наличия необходимых знаний оценивать верность определний.
andron81Вот и ответьте теперь на мой ранний вопрос , что будет результатом отката select ?Попытайтесь чего-нибудь вылить из пустой кастрюли. Результат и будет ответом на ваш вопрос.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679822
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

ну если я не прав, так не прав. почитайте как называется моя тема - я разбираюсь.
тем не менее это не логично ! интересно что ж в этом случае пишется в журнал транзакций ?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679824
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Гавриленко Сергей Алексеевич,
интересно что ж в этом случае пишется в журнал транзакций ?Зачем что-то писать в журнал, когда туда писать не нужно?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679827
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичandron81Гавриленко Сергей Алексеевич,
интересно что ж в этом случае пишется в журнал транзакций ?Зачем что-то писать в журнал, когда туда писать не нужно?

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

andron81тем не менее это не логично ! интересно что ж в этом случае пишется в журнал транзакций ?Да ничего не пишется.
Ещё раз - транзакция - это определённое состояние сервера/коннекта.
Вот, при SELECT сервер перешёл в это состояние, это где то отметилось в памяти, создался идентификатор транзакции, к нему привязались записи о блокировках (возможно - очень много записей, это тоже зависит от разного) и т.д.
andron81ну вот и где тут логика ? поэтому любой селект этонедотранзакция, если его нельзя откатить и нечего писать в журнал .Ну, можно назвать "недотранзакцией".
Но т.к. в документации сиквела разработчики не используют этот термин, а используют слово "транзакция", то мы это так и называем.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679837
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81ну вот и где тут логика ? поэтому любой селект этонедотранзакция, если его нельзя откатить и нечего писать в журнал .Вы не поверите, но delete, который ничего не удалил, в журнал тоже ничего не запишет. Как вам такая логика?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679839
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Не противоречит ли оно тому, что пишет парень про бэкапы и что включается в транзакцию.

Вот он пишет :
Те операции, которые были включены в транзакцию, можно подтвердить или откатить. А те, которые не были включены в транзакцию, не поменяли данные, и в транзакцию не включились, на неё не повлияли. Не хотите ему ссылку эту дать?Ну, я рассказывал про механизм транзакций в MSSQL.
Не буду спорить с теоретиками, по монографиям которых о теоретических транзакциях в ваакуме написали статью в энциклопедии, у менгя не хватит квалификации, да и желания нет.
Механизмы в других СУБД работают подобно механизмам MSSQL, так что для практического применения прислушайтесь к моим советам.
Но если вы должны сдать курсовик, или написать научную статью, то лучше изучать научные работы, а не механизмы MSSQL.
В общем, смотря какая цель.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679840
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичandron81ну вот и где тут логика ? поэтому любой селект этонедотранзакция, если его нельзя откатить и нечего писать в журнал .Вы не поверите, но delete, который ничего не удалил, в журнал тоже ничего не запишет. Как вам такая логика?Тогда "транзакция" волшебным образом превращается в "недотранзакцию" :-)
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679842
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgГавриленко Сергей Алексеевичпропущено...
Вы не поверите, но delete, который ничего не удалил, в журнал тоже ничего не запишет. Как вам такая логика?Тогда "транзакция" волшебным образом превращается в "недотранзакцию" :-)Осталось понять, зачем отличать "транзакции" от "недотранзакций" в зависимости от того, произошла ли в них модификация данных или нет. У меня вот не выходит.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679845
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичalexeyvgпропущено...
Тогда "транзакция" волшебным образом превращается в "недотранзакцию" :-)Осталось понять, зачем отличать "транзакции" от "недотранзакций" в зависимости от того, произошла ли в них модификация данных или нет. У меня вот не выходит.

зачем, а вот на собеседовании как бы Вы ответили ?

что называется транзакцией и является ли транзакция select * from table транзакцией с точки зрения MS SQL Server.
товарищ правда для Postgre сказал , что да является. и был получен минус !
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679846
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичalexeyvgпропущено...
Тогда "транзакция" волшебным образом превращается в "недотранзакцию" :-)Осталось понять, зачем отличать "транзакции" от "недотранзакций" в зависимости от того, произошла ли в них модификация данных или нет. У меня вот не выходит.Ну, если понимать транзакцию как некое "декларативное объявление атомарного изменения состояния информационной системы", то вполне можно так говорить. Транзакция, которая не изменяла данных, просто-напросто не существовала, при таком взгляде.

Но для реальной СУБД, даже так - для реальной информационной системы, разницы действительно никакой, это определённые статусы, структуры данных, идентификаторы и т.д., и при разных операциях, участвующих в транзакции, просто будут количественно разные действия в системе - но не качественно.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679847
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgГавриленко Сергей Алексеевичпропущено...
Осталось понять, зачем отличать "транзакции" от "недотранзакций" в зависимости от того, произошла ли в них модификация данных или нет. У меня вот не выходит.Ну, если понимать транзакцию как некое "декларативное объявление атомарного изменения состояния информационной системы", то вполне можно так говорить. Транзакция, которая не изменяла данных, просто-напросто не существовала, при таком взгляде.

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

что значит декларативное ? прокомментируйте , пож
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679848
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81зачем, а вот на собеседовании как бы Вы ответили ?На собеседовании я бы постарался ответить так, как понравится спрашивающему. Угадать сложно, это да.
Я практик, и если в доке написано, что SELECT выполняется в транзакции, значит для меня так и есть.
Но если спрашивает ХР-менеджер по листочку с цитатами из учебника, то мой ответ может ему не понравится.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679849
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81зачем, а вот на собеседовании как бы Вы ответили ? ... является ли транзакция select * from table транзакцией с точки зрения MS SQLЯ бы сказал, что в MSDN английским по-белому написано, что:
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/transactions-transact-sql?view=sql-server-2017 Autocommit transactions
Each individual statement is a transaction.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679852
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81alexeyvgпропущено...
Ну, если понимать транзакцию как некое "декларативное объявление атомарного изменения состояния информационной системы", то вполне можно так говорить. Транзакция, которая не изменяла данных, просто-напросто не существовала, при таком взгляде.

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

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

Вот SQL - декларативный язык, стейтмент, например, SELECT, или DELETE, или другой, не описывает последовательность действий, он описывает желаемый результат, который вы задекларировали, написав запрос.

А вот T-SQL - это императивный язык, а не декларативный, хотя и состоит из декларативных стейтментов.

То есть вы описываете последовательность действий, и эти действия выполняются, одно за другим, причём вы можете даже менять эту последовательность, например, операторами IF и т.п.

Т.о. если бы транзакция была декларативной, то вот этот блок описывал бы конечный результат - атомарно привести систему из состояния ДО в состояние ПОСЛЕ:
Код: 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


Но т.к. T-SQL - императивный язык, то операции выполняются последовательно:

Сначала, первой командой, начинается транзакция.
Нету никаких записей в лог, никаких изменений, даже нет SELECT-а, но транзакция уже есть.

Потом в контексте этой транзакции выполняется update BOOK_PURCH1. При этом может быть запись в лог, может и не быть.

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

Потому что язык T-SQL - императивный, программист сам управляет ходом выполнения программы, а не описывает некий атомарный пакет изменения состояния.

Разумеется, всё это совершенно не согласуется с определением транзакции у Дейта или в Вики, но мы же разбираемся в транзакциях MSSQL, а не в чём то ещё?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679854
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДекларативное - значит, описательное.Вообще, думаю, неудачный термин, может, правильнее говорить - "функциональный"?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679856
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ладно, уяснили. Короче говоря транзакция по MS это
each individual statement.

любой оператор, а значит любое действие над базой : чтение , изменение.
Всё !
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679962
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgalexeyvgДекларативное - значит, описательное.Вообще, думаю, неудачный термин, может, правильнее говорить - "функциональный"?
Не, функциональный - это другое: ЯП, оперирующий функциями в мат. интерпретации. Чистые функции, функции высшего порядка, лямбда-исчисление, и проч. Это лисп, хаскелл, эрланг, F#, и иже с ними. Это всё одинаково далеко и от декларативных, и императивных ЯП.

andron81ладно, уяснили. Короче говоря транзакция по MS это
each individual statement.

любой оператор, а значит любое действие над базой : чтение , изменение.
Всё !
И даже вот это?
Код: sql
1.
exec('');
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679985
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

разрушим психологию :)

Код: sql
1.
DECLARE @a int; SELECT @a = 1 


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

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

да и тут вы правы. трындец полный с этими транзакциями. по их определению любой код это транзакция . ваш - нет.
Строгости нет у MS в этом плане.
всё описано, то что вы взяли самое понятное для вас объяснение и натягиваете сову на глобус, то это ваша проблема а не ms
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39679994
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandron81TaPaK,

да и тут вы правы. трындец полный с этими транзакциями. по их определению любой код это транзакция . ваш - нет.
Строгости нет у MS в этом плане.
всё описано, то что вы взяли самое понятное для вас объяснение и натягиваете сову на глобус, то это ваша проблема а не ms

и где же описано ?

вот у них этим всё сказано :

Each individual statement is a transaction.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680000
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81TaPaKпропущено...

всё описано, то что вы взяли самое понятное для вас объяснение и натягиваете сову на глобус, то это ваша проблема а не ms

и где же описано ?

вот у них этим всё сказано :

Each individual statement is a transaction.

например вот
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-implicit-transactions-transact-sql?view=sql-server-2017
авторSELECT statements that do not select from a table do not start implicit transactions. For example SELECT GETDATE(); or SELECT 1, 'ABC'; do not require transactions.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680001
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и в тему когда писать

авторAlthough BEGIN TRANSACTION starts a local transaction, it is not recorded in the transaction log until the application subsequently performs an action that must be recorded in the log, such as executing an INSERT, UPDATE, or DELETE statement. An application can perform actions such as acquiring locks to protect the transaction isolation level of SELECT statements, but nothing is recorded in the log until the application performs a modification action.
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680002
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот ещё немного занимательного

Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @a TABLE (a INT);

BEGIN TRAN 
	INSERT INTO @a(a) VALUES (1)
ROLLBACK

SELECT * FROM @a
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680011
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппц. ИТ-загибаеццо. Жевать на 3 страницы такое простое понятие....
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680012
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoппц. ИТ-загибаеццо. Жевать на 3 страницы такое простое понятие....
давай, внеси свет в эту пещеру
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680045
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKвот ещё немного занимательного

Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @a TABLE (a INT);

BEGIN TRAN 
	INSERT INTO @a(a) VALUES (1)
ROLLBACK

SELECT * FROM @a




это значит что инсерт во временную таблицу как бы не транзакция
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680047
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81это значит что инсерт во временную таблицу как бы не транзакция
а где там временная таблица?
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680051
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandron81это значит что инсерт во временную таблицу как бы не транзакция
а где там временная таблица?

тупанул. в переменную таблица.

это такой же пример как и с DECLARE @a int; SELECT @a = 1
...
Рейтинг: 0 / 0
понятие транзакции. просьба разъяснить.
    #39680089
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81тупанул. в переменную таблица.

это такой же пример как и с DECLARE @a int; SELECT @a = 1Я вам уже писал - 21604617 , но, видимо, есть трудности с пониманием.

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


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