在mysql面临多个查询情况下,同一时刻修改数据,就会产生并发控制的问题。
一.读写锁
在处理并发读或者并发写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题,这两种类型的锁通常被称作共享锁和排他锁,也叫读锁和写锁。
具体暂不讨论读锁写锁的具体实现,描述一下所得概念:读锁时共享的,或者说是相互不阻塞的。多个客户端在同一时刻可以同时读取同一个资源,而互不干扰;写锁则是排他的,也就是说一个写锁会阻塞其他的读锁和写锁,这是出于安全的考虑,这样才能确保在给定的时间里。只有一个用户在写入(修改)数据,并防止其他用户对该条数据的写入。
二:锁粒度
一种提高共享资源并发性的方式就是让锁定的对象更具有选择性,尽量只锁定需要修改的数据,而不是所有的数据,更为理想的方式及是支队修改的数据片进行精确的锁定。
锁的数据量小,相应的系统所支持的并发程度越高,反之;对于系统来说,锁住的资源越多,会增加系统的开销,从而降低了并发程度。
表锁:是mysql中最基本的锁策略,并且是开销最小的策略,表锁会锁定整张表,一个用户在对表进行写操作(插入,删除,更新等)前,需要获得写锁,这样就会阻塞其他用户对这张表的所有读写操作,只有没有写锁时,其他读取的用户才会获得读锁,读锁之间是不相互阻塞的。
写锁比读锁具有更高的优先级,因此一个写锁请求可能会被插入到读锁队列的前面(写锁可以插入到锁队列中读锁的前面,反之读锁则不能插入到写锁的前面)
行锁:行锁可以在mysql面临多个查询情况下,同一时刻修改数据,就会产生并发控制的问题。
一.读写锁
在处理并发读或者并发写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题,这两种类型的锁通常被称作共享锁和排他锁,也叫读锁和写锁。
具体暂不讨论读锁写锁的具体实现,描述一下所得概念:读锁时共享的,或者说是相互不阻塞的。多个客户端在同一时刻可以同时读取同一个资源,而互不干扰;写锁则是排他的,也就是说一个写锁会阻塞其他的读锁和写锁,这是出于安全的考虑,这样才能确保在给定的时间里。只有一个用户在写入(修改)数据,并防止其他用户对该条数据的写入。
二:锁粒度
一种提高共享资源并发性的方式就是让锁定的对象更具有选择性,尽量只锁定需要修改的数据,而不是所有的数据,更为理想的方式及是支队修改的数据片进行精确的锁定。
锁的数据量小,相应的系统所支持的并发程度越高,反之;对于系统来说,锁住的资源越多,会增加系统的开销,从而降低了并发程度。
表锁:是mysql中最基本的锁策略,并且是开销最小的策略,表锁会锁定整张表,一个用户在对表进行写操作(插入,删除,更新等)前,需要获得写锁,这样就会阻塞其他用户对这张表的所有读写操作,只有没有写锁时,其他读取的用户才会获得读锁,读锁之间是不相互阻塞的。
写锁比读锁具有更高的优先级,因此一个写锁请求可能会被插入到读锁队列的前面(写锁可以插入到锁队列中读锁的前面,反之读锁则不能插入到写锁的前面)
行锁:行锁可以最大程度的支持并发处理,同时也带来的最大的锁开销。
原文:https://www.cnblogs.com/fengyue0520/p/11116982.html