邯郸哪里做网站,十大购物网站排名,品牌建设费用包括哪些?,红动中国设计网站官网一、介绍#xff1a;
1、锁的本质
业务场景中存在共享资源#xff0c;多个进程或线程需要竞争获取并处理共享资源#xff0c;为了保证公平、可靠、结果正确等业务逻辑#xff0c;要把并发执行的问题变为串行#xff0c;串行时引入第三方锁当成谁有权限来操作共享资源的判…一、介绍
1、锁的本质
业务场景中存在共享资源多个进程或线程需要竞争获取并处理共享资源为了保证公平、可靠、结果正确等业务逻辑要把并发执行的问题变为串行串行时引入第三方锁当成谁有权限来操作共享资源的判断依据。因为数据库是多用户共享资源的在并发环境下会破坏数据库的一致性所以需要锁来控制它们。数据库锁机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问变得有序所设计的一种规则。
2、mysql术语
1DDL
data manipulation language 它们是SELECT、UPDATE、INSERT、DELETE就象它的名字一样这4条命令是用来对 数据库里的数据 进行操作的语言
2DML
data definition language DDL比DML要多主要的命令有CREATE、ALTER、DROP等DDL主要是用在 定义或改变表TABLE的结构 数据类型表之间的链接和约束等初始化工作上他们大多在建立表时使用
3DCL
Data Control Language是数据库控制功能。是用来设置或更改数据库用户或角色权限 的语句包括grant,deny,revoke等语句。在默认状态下只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
二、按操作的颗粒分类
MySQL 数据库由于其自身架构的特点存在多种数据存储引擎每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计所以各存储引擎的锁定机制也有较大区别。
存储引擎表级锁行级锁页面锁MyISAM√××InnoDB√√×MEMORY√××BDB√×√
详见MySQL原理三锁定机制2表锁行锁与页锁-CSDN博客
三、按操作的类型分类
锁类型按照 操作类型划分 有「读锁S锁写锁X锁」其实它们与共享锁排他锁是一个意思只是不同叫法而已。 1、共享锁读锁/S锁
共享锁Shared Lock又称为读锁简称S锁是一种行级锁。
共享锁 就是多个事务对于同一数据共享一把锁都能访问到数据但是只能读不能修改。
# 加锁方式
select ... from ... lock in share mode;# 事务提交或回滚释放
commit;
rollback;2、排他锁写锁/X锁
排他锁EXclusive Lock又称为写锁简称X锁是一种行锁也可以是表锁。
排他锁 就是不能与其他锁并存即当前写操作没有完成前会阻断其他写锁和读锁。
注意其他事务不加锁的读是不会被阻塞的阻塞的是加锁的读
# 加锁方式:
# innodb引擎默认会在updatedelete语句加上 for update
SELECT * FROM student FOR UPDATE; # 排他锁
INSERT INTO student values ... # 排他锁
DELETE FROM student WHERE ... # 排他锁
UPDATE student SET ... # 排他锁# 事务提交或回滚释放
commit;
rollback;共享锁和排他锁的互斥关系共享锁与共享锁之前兼容排他锁不能与其他锁并存。意向锁之间是互相兼容的意向锁与普通的表级排他锁/表级共享锁互斥意向锁不会与行级的共享锁/排他锁互斥。
3、意向锁表锁
意向锁Intention Lock 简称 I锁是表级锁的一种它是由数据库引擎自行维护的用户自己无需也无法操作意向锁。
意向锁 能够将 检查行锁 的时间复杂度由 O(n) 变成 O(1)其加锁的具体做法就是当一个事务想要获取表中某一行的共享/排他锁的时候它会自动尝试给当前表的加上意向共享/排他锁用于防止全表扫描的一种锁。
1意向共享锁IS锁-表级锁 意向共享锁Intention Shared Lock 简称IS锁事务想要给某一个数据行加行级共享锁S锁之前必须先获取该表的IS锁表级锁
2意向排他锁IX锁-表级锁 意向排他锁Intention EXclusive Lock 简称IX锁事务想要给某一个数据行加行级排他锁X锁之前必须先获取该表的IX锁表级锁
4、意向锁的兼容互斥性
意向锁之间的兼容互斥性意向锁之间是互相兼容的。 意向锁与其他锁兼容互斥性意向锁与普通的排他锁/共享锁互斥这的排他锁X锁共享锁S锁指的都是表锁意向锁不会与行级的共享锁/排他锁互斥。上面表锁部分讲到的 显式加锁 加的就是排他锁/共享锁。 四、按操作的性能分类
从操作的性能可分为乐观锁和悲观锁。乐观锁/悲观锁其实都是概念上的只是在并发下防止数据被修改的一种加锁形式。
不同点乐观锁悲观锁实现方式乐观锁需要自己实现且外部系统不受控制没有加锁和解锁操作可以提高吞吐量。每次请求都需要加锁、释放锁这个过程会降低系统性能。单可以保证数据的独占性和正确性。实现方式有version方式常用和CAS算法两种实现方式。依靠数据库提供的锁机制实现。应用场景读多写少 。写多读少。