事务的原则与实现

什么是事务

事务是一种以可靠、一致的方式,访问和操作数据库中数据的程序单元

事务四大特性

  1. 原子性:事务当中的多个操作,要么都完成要么都失败。
  2. 一致性:事务完成后,状态的改变是一致的,结果是完整的。
  3. 隔离性:不同的事务在试图操作相同数据的时候,它们之间应该隔离
  4. 持久性:事务提交后,数据操作的结果才会保存到数据库永久保存。

四个隔离级别

1、read uncommitted 读未提交

事物A和事物B,事物A未提交的数据,事物B可以读取到 ,这里读取到的数据叫做“脏数据” 。这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别

2、read committed 读提交

事物A和事物B,事物A提交的数据,事物B才能读取到 。这种隔离级别高于读未提交 。 换句话说,对方事物提交之后的数据,我当前事物才能读取到 -。这种级别可以避免“脏数据” 。这种隔离级别会导致“不可重复读取” 。ORACLE默认级别

3、repeatable read 可重复读

事务A和事务B,事务A提交之后的数据,事务B读取不到,事务B是可重复读取数据。这种隔离级别高于读已提交,换句话说,对方提交之后的数据,我还是读取不到。这种隔离级别可以避免“不可重复读取”,达到可重复读取。比如1点和2点读到数据是同一个, MySQL默认级别。虽然可以达到可重复读取,但是会导致“幻读”。

4、serializable 线性读

事务A和事务B,事务A在操作数据库时,事务B只能排队等待 ,这种隔离级别很少使用,吞吐量太低,用户体验差 。这种级别可以避免“幻读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发。
.

数据库事务

MYSQL SQL开启事务示例:

START TRANSACTION;

UPDATE...INSERT;

COMMIT;

--ROLLBACK

查看mysql的隔离级别:

select @@GLOBAL.tx_isolation,@@tx_isolation

没有GLOBAL的tx_isolation表示session的隔离级别。

JDBC事务管理

在java中,我们的业务系统一般都有个Resource Manager,通过Resource Manager来做事务管理。Resource Manager会管理数据库的资源。Resource Manager会通过代理等方式调用具体的事务管理的实现类来进行事务管理。也就是通过JDBC Driver来做事务管理。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值