2013-02-11 3 views
2

Я пытаюсь имитировать подсистему восстановления базы данных с помощью java. Однако у меня есть следующие вопросы.Разница между транзакцией END и транзакцией COMMIT

Когда начинаются транзакции, всегда ли необходимо, чтобы была завершена транзакция? (Как приведенный ниже пример)

b1 --- Begin txn 1 
r1(X) --- Read item X using txn 1 
e1 --- End txn 1 

В соответствии с приведенным выше примером, я не делаю транзакцию транзакции Commit. Итак, будет ли моя транзакция успешной или неудачной? Если приведенный выше пример приведен ниже,

b1 --- Begin txn 1 
r1(X) --- Read item X using txn 1 
c1 --- commit txn 1 

В чем разница между окончанием и фиксацией?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

+2

SQL Server (T-SQL) не имеет команды 'END TRANSACTION'. –

+0

Теги принадлежат в области тегов, а не в заголовках вопросов. –

ответ

8

Либо вы ROLLBACK транзакции, либо COMMIT транзакция. Надеюсь, вы не сбиваете с толку блок BEGIN и END, который не является транзакцией и не имеет ничего общего с транзакцией на всех.

Я верю в большинство баз данных .... все еще кончается с ROLL BACK или COMMIT.

Надеюсь, это поможет.

+0

Спасибо за ваш ответ. Фактически в подсистеме базы данных, которая реализуется, всякий раз, когда я сталкиваюсь с END, мне приходится записывать изменения в файле журнала для этой транзакции. После того, как я столкнулся с COMMIT, фактические изменения должны быть записаны в блок диска. – Ramesh

0

«Конец» используется для завершения процедуры/функции. Это важно для выполнения инструкции.
«Commit» используется для постоянного сохранения всех изменений в транзакции.
Например, вы создали или удалили таблицу с помощью SQL Statement, вам нужно будет зафиксировать изменения.

Подробнее читайте здесь.
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htm

+0

Вы ошибаетесь. Транзакции не заканчиваются *, они либо совершаются, либо откатываются [даже в Oracle] (http://docs.oracle.com/cd/E11882_01/server.112/e10713/transact.htm#autoId7 "Обзор транзакции Control (Oracle) ») (который также не является платформой, на которую, как представляется, задан вопрос). –

+0

О, мой плохой, я имею в виду процесс. Извините и спасибо за это. –

0

Для транзакций SQL, поступающих изнутри такой программы, оператор END просто закрывает транзакцию. Это означает, что транзакция завершена, и больше ничего не должно быть. Инструкция COMMIT фактически сообщает базе данных, что вы хотите, чтобы изменения транзакции были ПОСТОЯННЫМИ.

Если вы находитесь в режиме «autocommit», инструкция COMMIT не требуется, поскольку каждый запрос/оператор должен быть зафиксирован.

Дополнительную информацию о COMMIT можно найти here.

Если вы используете ODBC для подключения к базе данных, информацию об управлении транзакциями можно найти here.

Также этот question был задан заранее.

+0

Я пытаюсь имитировать подсистему восстановления базы данных. Таким образом, пользовательские транзакции выдаются как начало, чтение, запись, завершение, фиксация, прерывание. Я должен написать алгоритм для каждой из этих пользовательских транзакций. Я не был уверен, что писать как алгоритм для «end». Я чувствую, что нет пользы для «конца», выпущенного пользователем, поскольку пользователь выдает «фиксацию» или «прервать». Поэтому я хотел знать, действительно ли нужен «конец». – Ramesh

-1

Пожалуйста, обратитесь к этому LINK Подробности

ЦИТАТА: НАЧАТЬ TRANS и END TRANS начать и завершить сделку. Они НЕ определяют новый блок кода; они только отмечают границы транзакций.

1

BEGIN/END делит блок кода, не контролируя транзакцию. Если в транзакции уже нет, каждый оператор будет выполняться в автономной транзакции.Обычно BEGIN/END используется с инструкциями ветвления/петли (IF/WHILE).

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

0

Точные имена команд для начала и окончания транзакции зависят от конкретной используемой вами базы данных (к сожалению).

Например:

В SQLite, вы используете НАЧАТЬ/BEGIN TRANSACTION, чтобы начать, и END/END TRANSACTION/COMMIT/COMMIT TRANSACTION, чтобы завершить сделку.

В MySQL вы используете START TRANSACTION/BEGIN/BEGIN WORK и COMMIT/COMMIT WORK для этого же.

Смежные вопросы