MySQL系列(二):MySQL是怎么处理并发操作的?

本文探讨了MySQL处理并发操作的方式,包括为何需要锁机制,MySQL中的锁分类如读锁、写锁和不同范围的锁。还介绍了事务的概念、ACID属性以及四种事务隔离级别,以及MySQL如何实现事务机制,特别是InnoDB存储引擎处理死锁的方法。此外,文章提到了MVCC机制在提高并发性能中的作用,主要应用于读已提交和可重复读的事务隔离级别。
摘要由CSDN通过智能技术生成

作者:z小赵

★ 

一枚用心坚持写原创的“无趣”程序猿,在自身受益的同时也让朋友们在技术上有所提升。

目录

  1. 为什么需要锁?

  2. MySQL 中锁分类?

  3. 什么是事务?

  4. 事务的隔离级别

  5. MySQL 是怎么实现事务机制的?

  6. MVCC 机制

  7. 总结

为什么需要锁?

相信大家都比较熟悉电商系统中库存管理的场景,对于日常活动促销、618、双 11 等场景,会在规定时间内对商品进行促销活动,假设现在有一款 HHKB 机械键盘要参与促销活动,数据库中准备了 10 件,促销活动开始时,多位买家开始争抢,每卖出一件商品,库存减 1,直到卖完,那么怎么能保证商品不会卖超呢?

对于以上这个场景来说,我们需要用到锁机制来保证每卖出一件商品,对库存进行更新操作时,其他用户请求不能对该商品库存进行修改;换句话说,用户 1 拿到了修改库存的锁,则只有用户 1 能修改数据,而用户 2 只能等着不能修改数据。如下图所示:

相反,如果没有锁的加持,用户 1 和用户 2 发现库存还有 1 件商品,同时都开始下单,用户 1 先将库存更新为 0,此时商品已经售完,而用户 2 也将库存更新为 0,就导致了卖超的尴尬情况。

MySQL 中锁分类?

锁根据使用场景不同,被分成了各种各样的锁。比如读写可以分为读锁和写锁,对于读请求之间相互是互不影响的,因为数据没有被所有,大家读取到的数据都是一样的,所以读锁也称之为共享锁;对于写请求,由于存在数据的变更,所以请求之间是互斥的,所以也称之为排它锁。

对于根据锁锁定的范围大小,可以分为全局锁、表锁、元数据锁、行锁:

  • 全局锁:顾名思义就是对整个数据库进行加锁操作,加锁期间,整个数据库只能够进行读操作。

  • 表锁:是对数据库中的某张表进行加锁,此时表与表之间可以同时进行写操作而互不影响,但是同一时刻同一张表只能有一个写操作。

  • 页面锁:页面锁是介于表锁和行锁之间的一种锁,其优势是中和表锁和行锁的锁开销。

  • 行锁:是对数据库表中的某一行进行加锁操

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值