MySQL数据库中的事务和隔离级别

一、什么是事务

事务是由多个SQL语句组成的一组操作,每个SQL语句相互依赖,如果其中一条SQL语句一旦执行失败,这组操作将会回滚。所有受影响的数据将返回事务开始以前的状态。如果一组中的所有SQL都执行成功,则这组操作才算执行成功。

MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
SHOW ENGINES; //查看当前存储引擎

二、事务的四个属性(简称ACID)

原子性(Atomicity)

- 原子性 多条SQL 要么同时成功 要么全部回滚
原子性是指一个事务必须被视为一个不可分割的最小的工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回执行事务前的状态。

一致性(Consistency)

- 一致性 事务结束 数据前后保持一致
一致性是指在事务处理时,无论执行成功还是失败,都要保证数据库系统处于一致的状态,保证数据库系统不会返回到一个未处理的事务中。MySQL中的一致性主要由日志机制实现,通过日志记录数据库的所有变化,为事务恢复提供了跟踪记录。

隔离性(IsoLation)

- 隔离性 多个事务 不受影响 我的事务执行 不会影响到你的事务
隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。隔离性相关的技术有并发控制、可串行化、锁等。当多个用户并发访问数据库时,数据库为每个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离

永久性(Durability)

- 永久性 事务执行完,永久有效
持久性是指事务一旦提交,其对数据库的修改就是永久性。但是打雷劈服务器不算

三、事务出现异常:

1、代码逻辑问题
2、数据库没有使用innodb
3、多个数据库,每个数据库都要开启事务
(例如:需要A库的A1、A2表,B库的B1、B2表,都需要开启事务)
事务需要注意
1、两条或以上增删改,使用事务。
2、rollback ( 回滚 ) 以后,事务还原且事务结束
3、事务不能嵌套,下一次出现begin(开启事务),默认为上个事务结束并提交

 

四、事务的隔离级别

select @@tx_isolation; 当前库的隔离级别

select @@global.tx_isolation; 整个数据库的隔离级别


读取未提交:(出现脏读)


A、B两个事务,B事务可以看到A事务未提交的操作
两端都要配置:
set session transaction isolation level read uncommitted;


读取已提交:(不可重复读)


A、B两个事务,B事务可以看到A事务已提交的操作
set session transaction isolation level read committed;


可重复读(幻读)


A、B两个事务,B事务不可以看到A事务已提交的操作
set session transaction isolation level repeatable read;


可串行化(最高级别的隔离级)


A、B、C三个事务,具有 增 删 改 操作具有顺序性,谁先开启begin(事务)
则需要后面的,需要等待前面的结束/提交操作才轮到下一个。
set session transaction isolation level serializable;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值