浅谈MySQL的锁

MySql的锁类别有乐观锁悲观锁

乐观锁:

   假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。悲观的缺陷是不论是页锁还是行锁,加锁的时间可能会很长,这样可能会长时间的限制其他用户的访问,也就是说悲观锁的并发访问性不好。

悲观锁:

   假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。乐观锁不能解决脏读,加锁的时间要比悲观锁短(只是在执行sql时加了基本的锁保证隔离性级别),乐观锁可以用较大的锁粒度获得较好的并发访问性能。

锁名 开销 加锁速度 死锁概率 粒度 并发性能
表锁 0 冲突率最高,并发du最低
页锁 0||1 并发du中
行锁 0||1 冲突率最小,并发du最高

innoDB和Myisam 两种数据库引擎对锁的支持

引擎 行锁 表锁 页锁
InnoDB
MyISAM

表锁更适用于以查询为主,只有少量按索引条件更新数据的应用;行锁更适用于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用。


当然关于为何要加锁推荐大家去看这篇
文章
我的理解是为了ACID
数据库事务拥有以下四个特性,习惯上被称之为ACID特性。
原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容