Как мне использовать транзакции в Firebird? - PullRequest
6 голосов
/ 06 июня 2011

В MS SQL Server я могу легко поместить несколько операторов вставки в транзакцию, например так:

begin tran
insert into mytable values (1, 2, 3)
insert into mytable values (4, 5, 6)
commit tran

Я пытаюсь сделать то же самое в Firebird, но не могу понять,синтаксис.Поиск в Google для «синтаксиса транзакций Firebird» ничего полезного не возвращает.Я нашел достаточно, чтобы знать, что поддержка транзакций существует , но нет примеров того, как правильно ее использовать.

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

Ответы [ 4 ]

7 голосов
/ 07 июня 2011

В дополнение к ответу Аллана (который я проголосовал, кстати), вот еще немного информации.

Когда вы делаете begin tran в SQL Server, это не означает, что вы запускаете транзакцию сейчас.Вы уже в транзакции, так как вы подключены к базе данных!Что действительно делает begin tran, так это отключает «автоматическую фиксацию при каждом утверждении», которая является состоянием по умолчанию в SQL Server (если не указано иное).

Соответственно, commit tran фиксирует и восстанавливает соединение с «»состояние автоматической фиксации при каждом операторе.

В любой базе данных, когда вы подключены, вы уже в транзакции.Вот как базы данных.Например, в Firebird вы можете выполнить коммит или откат, даже если только запустили запрос.

Некоторые базы данных и библиотеки подключений, с другой стороны, позволяют использовать состояние подключения «автоматическая фиксация при каждом утверждении», что и делает SQL Server.Как бы ни была полезна эта функция, новички не очень дидактичны и считают, что они «не в транзакции».

6 голосов
/ 06 июня 2011

Firebird всегда использует транзакции. Транзакция начинается, как только вы вносите изменения в базу данных, и остается открытой для этого сеанса до момента фиксации. Используя ваш код, это просто:

insert into mytable values (1, 2, 3);
insert into mytable values (4, 5, 6);
commit;
3 голосов
/ 30 июля 2012

Начиная с FB 2.5, можно начинать новую транзакцию из текущей.

IN AUTONOMOUS TRANSACTION
DO
  < simple statement | compound statement >

http://www.firebirdsql.org/rlsnotesh/rlsnotes25.html#rnfb25-psql-auton

0 голосов
/ 08 февраля 2018

Если у Firebird нет необходимости в дополнительном синтаксисе сверх

commit; 

Ниже я приведу скриншот из сеанса Firebird, показывающий, как он работает.

Нажмите, чтобы посмотреть

...