MySQL-----锁(行锁、表锁、页锁、乐观锁、悲观锁)
程序员文章站
2023-08-02 21:25:46
回顾: ACID:DBMS在写入或更新资料的过程中,为保证事务正确可靠,具有的四个特性:原子性(不可分割性)、一致性、隔离性(独立性)、持久性 一个事务:一系列数据库操作组成的一个完整的逻辑过程 原子性:一个事务中的所有操作,要么全部完成、要么全部不完成,若发生错误,回滚(RollBack) 一致性 ......
回顾:
acid:dbms在写入或更新资料的过程中,为保证事务正确可靠,具有的四个特性:原子性(不可分割性)、一致性、隔离性(独立性)、持久性
一个事务:一系列数据库操作组成的一个完整的逻辑过程
原子性:一个事务中的所有操作,要么全部完成、要么全部不完成,若发生错误,回滚(rollback)
一致性:事务开始之前和事务结束之后,数据库的完整性没有破坏
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别:读未提交、读提交、可重复读、串行化
持久性:事务处理结束后,对数据的修改时永久性的,系统出故障也不会改变
锁:协调多个进程或线程并发访问某一资源的一种机制.锁冲突是影响数据库并发访问性能的重要因素。
存储引擎支持不同的锁机制
行锁 | 表锁 | 页锁 | |
myisam | 支持 | ||
bdb | 支持 | 支持 | |
innodb | 支持 | 支持 |
开销、加锁速度、死锁、粒度、并发性能
- 行锁:开销大,加锁慢,会出现死锁;锁定粒度小,锁冲突概率小,并发度高
- 表锁:开销小,加锁快,不会出现死锁;锁定粒度大,发生锁冲突概率高,并发度最低
- 页锁:开销和加锁速度介于行锁和表锁之间,会出现死锁;锁粒度介于表锁和行锁之间,并发度一般
###根据具体应用决定适合那种锁,仅从锁的角度:表锁适合以查询为主;表锁适合按大量索引条件并发更新少量不同数据,同时又有并发查询的应用
myisam表锁
myisam只支持表锁,随着应用对事务的完整性和并发性要求提高,mysql才开始开发基于事务的存储引擎,而来出来innodb的行锁和bdb的页锁,innodb被oracle收购
先记录到此,后续更新
上一篇: 麻省理工教授透露为什么80%黑客都使用Python!
下一篇: c/c++ 函数模板初探