数据库事务

事务是什么?
事务是作为一个单元的一组有序的数据库操作,如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,如果一个操作失败,则事务回滚到操作前的状态。

事务四种特性
1、 原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
2、 一致性:事务的执行使得数据库从一种正确的状态转换成另一种正确的状态。
3、 隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间没有任何干扰。
4、 持久性:事务正确提交后,其结果将永久保存在数据库中。

MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
事物隔离级别是为了解决并发出现的问题。

脏读:
事务T1正在操作一条数据,此时事务T2获取该条数据纪录,如果T1异常,事务回滚,T2读取到的数据就是脏数据,这种现象称为脏读。
解决方案:
读取数据时加上共享锁,不允许任何事务操作该数据,只能读取,读完释放。更新数据时加上排他锁,其他事务无权参与进来读写,直到事务提交后释放,这样就可以防止脏读问题。

不可重复读:
事务T1多次读取某条记录,在读取间隔中,事务T2更新了该记录的数据,当T1再次读取该记录时,获取到的数据不一致,这种现象称为不可重复读。

幻读:
事务T1批量处理多条记录,此时事务T2新增或删除了一条或多条记录,当T1处理完成,查询处理结果,会发现有记录没有处理(T2新增的)或者发现记录少了(T2删除的),会有一种幻觉的感觉,这种现象称为幻读。

读取未提交内容(Read Uncommitted):
就是一个事务读取到其他事务未提交的数据,是级别最低的隔离机制,也被称之为脏读。会产生脏读、不可重复读、幻读。

读取提交内容(Read Committed):
就是一个事务读取到其他事务提交后的数据。会产生不可重复读、幻读。

可重复读(Repeatable Read):
就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改。MySQL默认的隔离级别。会产生幻读。

可串行化(Serializable)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值