事务概述和演示:

一件完整的事情.可以包含多个操作,操作要么成功,要么全部失败

mysql中的事务:

默认是事务自动提交
手动提交:
1.关闭自动提交
2.手动开启一个事务
start transaction;
commit;
rollback;

java中的事务:

Connection接口的api
setAutoCommit(false):手动的开启一个事务
commit():提交
rollback():回滚

DBUitls使用事务:

1.创建QueryRunner
new QueryRunner():手动事务 调用他的方法的时候必须手动传入一个连接,连接得手动关闭,事务得手动控制.
new QueryRunner(DataSource ds):自动事务 调用他的方法的时候不需要传入一个连接,连接自动关闭,事务自动控制.
2.使用的方法 (手动事务)
query(Conection con .....)
update(Connection con .....)



事务中要想保证在一个事务中,必须保证使用同一个Connection连接(在中项目解决方式)

方式1:向下传递连接(将链接对象作为参数传递给dao层)


方式2:将连接和当前线程绑定
ThreadLocal
常用的方法:
set(Object value)
Object get()
remove()



事务的特性:

ACID

- 原子性 -- 事务不可分割.
- 一致性 -- 事务执行的前后数据的完整性保持一致.
- 隔离性 -- 一个事务执行的过程中,不应该受到其他的事务的干扰.
- 持久性 -- 事务一旦提交,数据就永久保持到数据库中.

若不考虑隔离性的时候会发生的问题

- 脏读 - 一个事务读到了另一个事务未提交的数据.
- 不可重复读 - 一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致.
- 虚读 - 一个事务读到了另一个事务已经提交的insert数据,导致多次查询结构不一致.

设置隔离级别

通过设置隔离级别可以解决上面的问题
- read uncommitted:读未提交 什么问题都避免不了
- read committed:读已提交 避免脏读
- repeatable read:可重复读 避免脏读和不可重复读
- serializable:串行化 避免所有的问题 锁表
安全:
serializable>repeatable read>read committed>read uncommitted
效率
serializable<repeatable read<read committed<read uncommitted

mysql中默认隔离级别 repeatable read
oracle中默认隔离级别 read committed
优质内容筛选与推荐>>
1、Spring Test 整合 JUnit 4 使用
2、筛选出中文的正则表达式
3、ccMacros
4、c++类中的常量
5、MIT线性代数:12.图和网络


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号