我记得spring事务管理,默认是自动提交为false,但是好像很多数据库池,包括druid,自动提交默认是true,那这之间不是有冲突吗?另外底层数据库,譬如mysql的配置中也可以配置autocommit,那么这三者谁的优先级最高呢,也就是哪个的设置可以覆盖其他的?
另外,这里的自动提交的理解有两种
1)整个事务将要结束时,事务管理AOP自动提交
2)每一句sql语句执行完时,自动提交
数据库池的defaultAutoCommit和spring事务管理中所谓的自动提交针对的是哪一种?
我记得spring事务管理,默认是自动提交为false,但是好像很多数据库池,包括druid,自动提交默认是true,那这之间不是有冲突吗?另外底层数据库,譬如mysql的配置中也可以配置autocommit,那么这三者谁的优先级最高呢,也就是哪个的设置可以覆盖其他的?
另外,这里的自动提交的理解有两种
1)整个事务将要结束时,事务管理AOP自动提交
2)每一句sql语句执行完时,自动提交
数据库池的defaultAutoCommit和spring事务管理中所谓的自动提交针对的是哪一种?
aotucommit 的意思
autocommit
为 off
的情况下,只要执行了 DML
语句(包括 select
),就会自动开启一个事务(begin
),直到执行 commit
或 rollback
才会结束事务autocommit
为 on
的情况下, 每次执行插入、更新、删除语句会自动提交,不需要显式 commit
三者优先级
手动设置可以覆盖默认设置,也就是说spring
和druid
可以覆盖mysql
配置的autocommit
后一个设置会覆盖前一个设置的,druid
先设置,spring
后设置
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
不清楚spring,但在数据库层面,
MySQL的自动提交,是每条来自客户端的语句执行完后自动提交。
但如果使用begin或start transaction显式开启一个事务,则需要显示的commit或rollback来结束事务。
当然,一个事务内执行DDL会触发隐式提交。