目录
Mysql锁
锁的概念:
锁是计算机协调多个进程或线程并发访问某一资源的机制
在数据中,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素
锁对数据库而言显得尤其重要,也更加复杂
mysql的锁机制比较简单
其最显著的特点是不同的存储引擎支持不同的锁机制
比如:
MyISAM和Memory存储引擎采用的是表级锁(table-level locking)
InnoDB存储引擎支持行级锁(row-level locking),也支持表级锁,但默认情况下使用行级锁
Mysql中的锁
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最好,并发度最低
行级锁:开销大,加锁慢;会出现死锁,锁定流利度最小,发生所冲突的概率最低,并发度最高
页面锁:开销和加锁时间介于表级锁和航急速之间;会出现死锁;锁定粒度介于表锁和行锁之间;会出现死锁;锁粒度介于表锁和行锁之间,并发度一般。
仅从锁的角度来说:
表级锁更适合用于以查询为主,只有少量按索引条件更新数据的应用,如olap系统
行级锁则更适合有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统
MyISAM锁
读锁和读锁可以共存,读锁和写锁无法共存,写锁和写锁无法共存
MyISAM表共享读锁(table read lock)
给表加锁:
lock table 表名 read
lock table 表名 as 别名 read
解锁:unlock tables
在同一个session中,对同一张表进行修改,会报错,在不同的session