首页 > 数据库 > MySQL > 正文

MySQL锁及类别有哪些

2022-07-24 18:01:28
字体:
来源:转载
供稿:网友
  今天小编给大家分享一下MySQL锁及分类有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
 
  在高并发场景下,不考虑其他中间件的情况下,数据库会存在以下场景:
 
  读读:不存在任何问题,也不需要并发控制。
  读写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读。
  写写:有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失。
  针对以上问题,SQL 标准规定不同隔离级别下可能发生的问题不一样:
 
  如果我们的一些业务场景不允许读取记录的旧版本,而是每次都必须去读取记录的最新版本,比方在银行存款的事务中,你需要先把账户的余额读出来,然后将其加上本次存款的数额,最后再写到数据库中。在将账户余额读取出来后,就不想让别的事务再访问该余额,直到本次存款事务执行完成,其他事务才可以访问账户的余额。这样在读取记录的时候也就需要对其进行加锁操作,这样也就意味着读操作和写操作也像写-写操作那样排队执行。
 
  对于脏读,是因为当前事务读取了另一个未提交事务写的一条记录,但如果另一个事务在写记录的时候就给这条记录加锁,那么当前事务就无法继续读取该记录了,所以也就不会有脏读问题的产生了。
 
  对于不可重复读,是因为当前事务先读取一条记录,另外一个事务对该记录做了改动之后并提交之后,当前事务再次读取时会获得不同的值,如果在当前事务读取记录时就给该记录加锁,那么另一个事务就无法修改该记录,自然也不会发生不可重复读了。
 
  对于幻读,是因为当前事务读取了一个范围的记录,然后另外的事务向该范围内插入了新记录,当前事务再次读取该范围的记录时发现了新插入的新记录,我们把新插入的那些记录称之为幻影记录。

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表