Что произойдет, если вы не совершаете транзакцию с базой данных (скажем, SQL Server)?

Предположим, у меня есть запрос:

begin tran -- some other sql code 

И затем я забываю совершить или отступить.

Если другой клиент попытается выполнить запрос, что произойдет?

Пока вы не COMMIT или ROLLBACK транзакции, он все еще «работает» и потенциально удерживает блокировки.

Если ваш клиент (приложение или пользователь) закрывает соединение с базой данных, любые все еще запущенные транзакции будут отменены и завершены.

Вы можете попробовать это сами, что должно помочь вам понять, как это работает.

Откройте два windows (вкладки) в студии управления, у каждого из них будет свое собственное подключение к sql.

Теперь вы можете начать транзакцию в одном окне, сделать некоторые вещи, такие как insert / update / delete, но еще не зафиксировать. то в другом окне вы можете увидеть, как выглядит firebase database вне транзакции. В зависимости от уровня изоляции таблица может быть заблокирована до тех пор, пока не будет зафиксировано первое окно, или вы не сможете увидеть, что сделала другая транзакция до сих пор и т. Д.

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

Также посмотрите, что произойдет, если вы сделаете ошибку в транзакции.

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

Повеселись! ГДж.

Транзакции предназначены для полного или полного выполнения транзакций. Единственный способ совершить транзакцию – совершить, любой другой способ приведет к откату.

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

зависит от уровня изоляции входящей транзакции.

Изоляция транзакции Sql

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

Пример транзакции

начать движение

Ваши заявления в sql

если произошла ошибка rollback tran tt else commit tran tt

Пока вы не выполнили commit tran tt, данные не будут изменены

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

Вы можете использовать dbcc opentran для просмотра сведений о самой старой открытой транзакции.

Любая незавершенная транзакция оставит сервер заблокированным, а другие запросы не будут выполняться на сервере. Вам нужно либо отменить транзакцию, либо передать ее. Закрытие SSMS также прекратит транзакцию, которая позволит выполнять другие запросы.

Поведение не определено, поэтому вы должны явно указать фиксацию или откат:

http://docs.oracle.com/cd/B10500_01/java.920/a96654/basic.htm#1003303

«Если режим автоматической фиксации отключен и вы закрываете соединение без явной фиксации или отмены ваших последних изменений, тогда выполняется неявная операция COMMIT».

Hsqldb делает откат

 con.setAutoCommit(false); stmt.executeUpdate("insert into USER values ('" + insertedUserId + "','Anton','Alaf')"); con.close(); 

результат

2011-11-14 14: 20: 22,519 Основная информация [SqlAutoCommitExample: 55] [AutoCommit enabled = false] 2011-11-14 14: 20: 22,546 Основная информация [SqlAutoCommitExample: 65] [Найдено 0 # пользователей в базе данных]

  • Как интегрировать весну с сеансом гибернации и управлением транзакциями?
  • TransactionScope автоматически переходит на MSDTC на некоторых машинах?
  • Использование транзакций или SaveChanges (false) и AcceptAllChanges ()?
  • Oracle: как узнать, ожидает ли транзакция?
  • Операционная система Android
  • Являются ли функции PostgreSQL транзакционными?
  • Как использовать TransactionScope в C #?
  • Каков уровень изоляции транзакций по умолчанию для SQL Server с ADO.NET?
  • Firebase runTransaction не работает - MutableData имеет значение null
  • Django: как я могу защитить от одновременной модификации записей в базе данных
  • Вам нужна транзакция базы данных для чтения данных?
  • Давайте будем гением компьютера.