Что произойдет, если я сделаю connection.setAutoCommit(false);
Это создает новую транзакцию со стороны базы данных?Что происходит при подключении.setAutoCommit = false
ответ
Согласно documentation, connection.setAutoCommit(false)
позволит вам группы несколько последующих Statement
сек при одной и той же сделке. Эта транзакция будет совершена при вызове connection.commit()
, а не после каждого вызова execute()
по отдельности Statement
s (что происходит, если автокоммит включен).
Изменение режима автоматической фиксации через connection.setAutoCommit()
неявно совершает активную транзакцию и создает новую. От Javadocs:
ПРИМЕЧАНИЕ. Если этот метод вызывается во время транзакции и изменяется режим автоматической фиксации, транзакция фиксируется. Если вызывается setAutoCommit, и режим автоматической фиксации не изменяется, вызов не работает.
'connection.commit()' завершает транзакцию, но мне любопытно узнать когда транзакция начнется? – eatSleepCode
Фактически, изменение режима автоматической фиксации создает новую транзакцию. Я изменил свой ответ. –
@MickMnemonic, что это значит: «Если вызывается setAutoCommit, и режим автоматической фиксации не изменяется, вызов не работает». –
В JavaDocs обеспечить хорошее объяснение этого случая использования в Using Transactions Section
Отключение автоматической фиксации режима
Когда соединение создано, оно находится в режиме автоматической фиксации. Это означает, что каждый отдельный SQL-оператор рассматривается как транзакция и автоматически фиксируется сразу после его выполнения. (Чтобы быть точнее, значение по умолчанию для оператора SQL, которое должно быть зафиксировано, когда оно завершено , а не когда оно выполнено. Заявление завершается, когда все его наборов результатов и подсчетов обновлений были получены. Почти в во всех случаях, однако, заявление завершено, и, следовательно, совершили, сразу после его выполнения.)
пути, чтобы два или более операторов, которые будут сгруппированы в транзакции, чтобы отключить режим автоматической фиксации. Это продемонстрировано в следующем коде, где кон представляет собой активное соединение:
con.setAutoCommit(false);
Реализация каждого метода внутри JDBC API, зависит от каждого драйвера. Oracle может делать что-то совсем другое, чем MySql.
Однако только вызов connection.setAutoCommit(false);
не создает транзакции. Это означает, что любое заявление, созданное с использованием этого соединения, будет передаваться вместе, когда вы вызываете connection.commit();
.
Посмотрите на this Учебник по Oracle.
Мне просто интересно узнать, поэтому транзакция начинается со стороны базы данных при выполнении первого оператора? – eatSleepCode
Ну, это зависит от водителя. У каждого поставщика может быть другое поведение. Я не знаю, с чего начинается транзакция, но, насколько мне известно, это не имеет значения, потому что все реализации должны полностью заполнить требования JDBC API. – jfcorugedo
- 1. Что происходит при обновлении?
- 2. Что происходит при вводе
- 3. Что происходит при перетаскивании экрана?
- 4. Что происходит при вызове QueryPerformanceCounter?
- 5. Что происходит при перенаправлении unique_ptr?
- 6. Что происходит при живой миграции
- 7. Что происходит при закрытии ServerSocket
- 8. Что происходит при ошибке GetMessage?
- 9. Что происходит при объединении индекса?
- 10. Что происходит при сбое активности
- 11. Что происходит при загрузке каталога?
- 12. Что происходит при объявлении переменной?
- 13. Что происходит при использовании DISTINCT?
- 14. Что происходит после того, как IRouteConstraint.Match возвращает false
- 15. Что происходит, когда я устанавливаю второй аргумент getFileName() на false?
- 16. Ruby's 'is_a?' возвращает false для встроенных типов, что происходит?
- 17. Что происходит с визуализацией вызова вида, когда фильтр возвращает false?
- 18. Код работает, но модульный тест говорит false, Что происходит?
- 19. Что происходит при запуске этого кода?
- 20. Что происходит после onDestroy()
- 21. HTTP-пакеты, что происходит?
- 22. Почему мой код выводит false, что происходит при if (c> b> a)?
- 23. Как тип принуждения происходит, когда [] == false?
- 24. Что происходит с списком при передаче функции?
- 25. Что происходит за кулисами при использовании super()
- 26. Что происходит при попытке использовать переменную массива
- 27. Что происходит при сбое узла HBase?
- 28. Что происходит между {и} при написании BNF?
- 29. Что происходит при создании экземпляра Thread, Java
- 30. mysql multiple insert - что происходит при ошибке?
вот хорошее объяснение относительно 'commit' – nafas
@nafas Вам не удалось добавить ссылку? – eatSleepCode
no Идея, как мне удалось ее пропустить: http://dba.stackexchange.com/questions/4252/do-inserts-get-auto-committed – nafas