事务并发问题以及隔离级别

一:事务的四大属性 : ACID

原子性 atomicity : 事务是一个原子操作单元.当事务修改时,要么全执行,要么全不执行,不允许事务部分完成.

一致性 consistency : 一个事务执行开始和执行完成,数据库数据必须保持一致性状态.这意味着所有相关数据都必须应用于事务的修改,以保证完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的.

数据不一致性的表现:脏读,幻读,不可重复读;

隔离性(独立性) isolation : 隔离性使得每个事务的更新在它被提交之前,对其他事务不可见,提高安全性.实现隔离性是解决临时更新与消除级联回滚(级联回滚即因一个事务故障导致一系列事务回滚)问题的一种方式.

持久性(永久性) durability :事务完成后,数据库中数据的修改是永久性的的,当系统或介质发生故障,该修改也是永久性的.持久性一般通过数据库备份与恢复来保证

二:并发事务带来的问题:

更新丢失 Lost Update

脏读 Dirty Reads : “select”操作不规矩

不可重复读 Non-Repeatable Reads : “update”操作不规矩

幻读 Phantom Reads : “insert”和“delete”操作不规矩

三:事务的隔离级别

未提交读 Read uncommittned : 无法避免脏读,不可重复读,幻读,属于最低级别,只能保证不读取物理上的损坏的数据

已提交读 Read committed : 可以避免脏读,属于语句级

可重复读 Repeatable : 可以避免脏读,不可重复读,属于事务级

序列化 Repeatable : 可以避免脏读,不可重复读,幻读,属于事务级,最高级别

为了防止出现脏读、不可重复读、幻读等情况,我们就需要根据我们的实际需求来设置事务隔离机制来解决。 数据库的事务隔离越严格,并发的副作用越小,但付出的代价也越大.因为事务隔离实质上就是在一定程度上"串行化"进行,这与"并发"相矛盾.

四:扩展:

  • 锁的分类:从对数据的操作类型分为读锁和写锁。从对数据操作的粒度来分:表锁和行锁
  • 查看当前数据库的事务隔离级别 : show variables like ‘tx_isolation’;
  • 在mysql数据库中如何锁定一行数据,保证不被其他的操作影响 : 在SQL语句后面加上for update,可以锁定某一行,其他操作会被阻塞,直到锁定行的会话被commit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值