一.对锁机制的大概介绍:
1.大概的来说,MYSQL当中的锁实际上就是合理的管理多个服务器对于同一个共享资源的使用,是计算机协调多个进程或者是线程并发访问某一资源的机制(避免争抢资源的现象发生)
2.在数据库当中,数据是一种可以供许多的用户进行共享使用的资源,如何保证数据并发访问的一致性,有效性是所有的数据库必须进行解决的一个关键问题,锁冲突也是影响数据库并发访问性能的一个重要因素.从这个角度来讲,锁对于数据库显得非常的重要,相同的,也更加的复杂
二.锁的大概分类
1.从对于数据操作的力度区分:
1>表锁:操作的时候会对于整个表进行锁定
2>行锁,操作时,会锁定操作的行
2.从对于数据操作的类型进行区分:
1>读锁(共享锁) :针对于同一份的数据,多个的读取操作可以同时的进行,并且并不会相互的有所影响(前提是并没有任何的更改数据操作)
2>写锁(排它锁) :在当前操作尚未完成之前,会阻断其他的读锁以及相应的写锁
三.MYSQL的锁机制:
相比于其他的锁,MYSQL的锁机制比较的简单,最显著的特征就是针对不同的存储引擎有不同的锁机制
四:不同存储引擎的操作演示:
1>MYISAM存储引擎:
因为MYISAM仅仅只支持表锁,所以仅仅只讲解表锁得相关操作
1.读锁:(lock table tablename read)
进行读锁之后,发现两个都能够对这个表进行相应的数据查询,但是无法进行切换到其他的表以及进行相应的数据添加和修改.同时的两个都能够对于同一张表进行读锁的操作,不相冲突
一旦加了读锁,就必须查看当前的表,不能对于其他的表进行操作,除非解除读锁(unlock tables)
2.写锁(lock table test1 write):
在左边加入了写锁之后,左边可以正常的进行查询当前锁表,并且进行一些修改,但是右边无法对其进行任何得操作,比如图中得查询操作,也会因为被上了写锁而让右边对其得查询被挂起,无法进行下去!
通俗得说,写锁就是占用了一个其他任何人都无法进入得空间,仅仅只有当事人可以对其进行一定得操作,其他人都不能,解除写锁之后方可.并且,写锁仅仅只能一个服务器单独得针对一个表,而不能像读锁一样可以多个都进行添加锁
2>InnoDB存储引擎:
InnoDB的表锁跟MYISAM的大致上都是一样的,所以就不再概述,在这里主要讲解行锁的相关操作:
同时为了方便观察,建议关闭事务的自动提交!
1.行锁的特点:
偏向于INNODB,开销比较的大,并且加锁比较的慢,锁的定位力度最小,但是,因为是对与一行一行的进行行锁,那么发生锁冲突的概率也是比较低的,并发度也是最高的(同时进行操作)
1.共享锁(又称为读锁) 多个事务可以对于同一列进行访问数据,但是仅仅只能够进行读取,而不能够进行相应的修改数据
2.排它锁(又称为写锁) 不能够与其他的锁并存,一个事务获得了一行数据的排他锁,那么其他的事务就不能够对其再次的进行获取,包括了读取以及修改,除非该锁打开
如图,当没有提交事务之前,如果再对于同一个行的数据再次进行修改的时候就会被挂起,从而无法修改,但是!可以对于除了这一行的其他行进行修改!这就是行锁对于表锁的一大不同之处
TIPS:
对于DQL的相关操作:update insert delete操作,INNODB都会自动的进行添加排他锁
对于普通的查询操作,并不会添加任何的锁
OVER!感谢观看