MySQL事务

MySQL事务


1.什么是事务?

要么都成功,要么都失败!

2.事务原则 (ACID)

事务原则:ACID原则

原子性:表示事务是一个不可分割的整体,要么都成功,要么都失败

一致性:事务前后数据完整性要保持一致

隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

3.事务隔离级别

隔离级别:读未提交,读已提交,可重复度,串行化

事务隔离性导致的问题:

由于事务的隔离性,导致了一些问题:脏读,不可重复读,幻读

脏读:一个事务读取了另一个事务没有提交到数据

不可重复读:事务在多次读取某个数据的时候,发现数据并不相同,可能是先读取到了其他事务未提交的数据,后又读到了提交后的数据。

幻读:事务在多次读取数据的时候,发现读取到底数据数量不相同,存在未读取到的数据,仿佛没有读取过,一般发生在存在其他事务进行了数据插入,先读取到了还未插入的时候的表数据,后又读取到了插入的数据。

为了解决事务隔离所产生的问题,我们可以设置事务隔离级别:

事务隔离级别:

读未提交:最低的隔离级别,不能防止上面出现的问题

读已提交:可以防止脏读情况发生

可重复读:可防止脏读,不可重复读的情况发生

串行化:可防脏读、幻读和不可重复读的情况发生。

4.如何配置事务隔离级别

4.1 通过sql命令实现

set transaction isolation level 设置事务隔离级别
select @@tx_isolation 查询当前事务隔离级别s

Serializable 可避免脏读、不可重复读、虚读情况的发生。(串行化)
Repeatable read 可避免脏读、不可重复读情况的发生。(可重复读)
Read committed 可避免脏读情况发生(读已提交)。
Read uncommitted 最低级别,以上情况均无法保证。(读未提交)

4.2通过java层面实现

通过Connection对象配置事务隔离级别

Connection对象的方法:setAutoCommit 或 setTransactionIsolation

TRANSACTION_SERIALIZABLE 指示不可以发生脏读、不可重复读和虚读的常量。
TRANSACTION_REPEATABLE_READ 指示不可以发生脏读和不可重复读的常量;虚读可以发生。
TRANSACTION_READ_UNCOMMITTED 指示可以发生脏读、不可重复读和虚读的常量。
TRANSACTION_READ_COMMITTED 指示不可以发生脏读的常量;不可重复读和虚读可以发生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值