首页 > 数据库技术 > 详细

MySQL——事务隔离

时间:2021-06-18 19:08:33      阅读:31      评论:0      收藏:0      [点我收藏+]

  和数据库打交道的时候,总是会用到事务。最经典的例子就是转账,你要给朋友转100块钱,而此时你的银行卡里只有100块钱。

  转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这100块钱完全可以借着这个时间差再查一次,然后再给另一个朋友转账,如果银行这么整不就乱了吗?这是就要用到“事务”这个概念了。

  简单来说,事务就是要保证一组数据库操作要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。这也是MyISAM被InnoDB取代的重要原因之一。

隔离性与隔离级别

  提到事务,就肯定会想到ACID(Atomicity、Consistency、Isolation、Durability,即事务的原子性、一致性、隔离性和永久性),这里说的是I隔离性。

  当数据库上有多个事务同时执行的时候,就可能会出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。

  在谈隔离级别之前,首先要知道,隔离的越严实,效率就会越低。因此很多时候要在二者之间寻找一个平衡点。SQL标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable)。

  • 读未提交是指,一个事务还没提交时,它做的变更就能被其他事务看到;
  • 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到;
  • 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的;
  • 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成才能继续执行

 

MySQL——事务隔离

原文:https://www.cnblogs.com/xmcwm/p/14900264.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!