MySql的锁类别有乐观锁和悲观锁
乐观锁:
假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。悲观的缺陷是不论是页锁还是行锁,加锁的时间可能会很长,这样可能会长时间的限制其他用户的访问,也就是说悲观锁的并发访问性不好。
悲观锁:
假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。乐观锁不能解决脏读,加锁的时间要比悲观锁短(只是在执行sql时加了基本的锁保证隔离性级别),乐观锁可以用较大的锁粒度获得较好的并发访问性能。
锁名 | 开销 | 加锁速度 | 死锁概率 | 粒度 | 并发性能 |
---|---|---|---|---|---|
表锁 | 小 | 快 | 0 | 大 | 冲突率最高,并发du最低 |
页锁 | 中 | 中 | 0||1 | 中 | 并发du中 |
行锁 | 大 | 慢 | 0||1 | 小 | 冲突率最小,并发du最高 |
innoDB和Myisam 两种数据库引擎对锁的支持
引擎 | 行锁 | 表锁 | 页锁 |
---|---|---|---|
InnoDB | √ | √ | |
MyISAM | √ |
表锁更适用于以查询为主,只有少量按索引条件更新数据的应用;行锁更适用于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用。
当然关于为何要加锁推荐大家去看这篇
文章
我的理解是为了ACID
数据库事务拥有以下四个特性,习惯上被称之为ACID特性。
原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
网友评论