Відповіді:
Поки ви не ЗРОБУЄМО чи ЗВ'ЯЗАТИ транзакцію, вона все ще "працює" і потенційно тримає блокування.
Якщо ваш клієнт (додаток або користувач) закриває з'єднання з базою даних перед вчиненням, будь-які ще запущені транзакції будуть відмовлені та припинені.
Насправді ви можете спробувати це самостійно, що допоможе вам відчути, як це працює.
Відкрийте два вікна (вкладки) в студії управління, кожне з них матиме власне підключення до sql.
Тепер ви можете розпочати транзакцію в одному вікні, виконайте такі речі, як вставити / оновити / видалити, але ще не виконувати. тоді в іншому вікні ви бачите, як виглядає база даних поза трансакцією. Залежно від рівня ізоляції таблиця може бути заблокована, поки не буде виконано перше вікно, або ви (не) зможете побачити, що робила інша транзакція до цього часу тощо.
Пограйте з різними рівнями ізоляції і не натякайте на блокування, щоб побачити, як вони впливають на результати.
Також дивіться, що відбувається, коли ви кидаєте помилку в транзакції.
Дуже важливо зрозуміти, як працює весь цей матеріал, або ви будете спотикатися тим, що робить sql, багато разів.
Веселіться! GJ.
Операції призначені для здійснення повністю або взагалі. Єдиний спосіб завершити транзакцію - здійснити будь-який інший спосіб призведе до відкоту.
Тому, якщо ви почнете, а потім не скористаєтеся, він буде відкатаний після закриття з'єднання (оскільки транзакція була розірвана без позначення як завершеної).
залежить від рівня ізоляції вхідної транзакції.
Коли ви відкриваєте транзакцію, нічого не блокується само собою. Але якщо виконувати деякі запити всередині цієї транзакції, залежно від рівня ізоляції, деякі рядки, таблиці або сторінки заблокуються, тому це вплине на інші запити, які намагаються отримати доступ до них з інших транзакцій.
Приклад транзакції
почати тран тт
Ваші заяви sql
якщо сталася помилка відкат tran tt else вчиняти tran tt
Поки ви не виконали трансакцію, дані не будуть змінені
BEGIN TRAN X ... BEGIN TRAN Y ... ROLLBACK Y
не працює, наприклад. Див stackoverflow.com/questions/1273376 / ...
На додаток до можливих проблем із блокуванням, які ви можете викликати, ви також виявите, що ваші журнали транзакцій починають зростати, оскільки вони не можуть бути усічені за мінімальний 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 основна ІНФО