1、排它锁、共享锁出现的意义
数据库的并发事务对数据库进行读写,可能会破坏事务的隔离性和数据一致性。为了保持事务的隔离性,系统必须对事务之间的相互作用加以控制。最典型的做法就是当一个事务访问某个数据对象时,
其他事务都不能更新该数据对象。最常用的控制手段就是加锁,该方法是只允许事务访问当前持有锁的数据项。其中最常用的有排它锁、共享锁。
2、排它锁(Exclusive Locks 简称X锁)
排它锁也成为写锁,主要用于对数据读写操作时进行锁定。如果事务T对数据A加上排它锁后,就只允许事务T对数据A的读取、修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的排它锁。
3、共享锁(Share Locks 简称S锁)
共享锁也成为读锁,主要用于对数据进行读取操作时进行锁定。如果事务T对数据A加上共享锁后,事务T只能读取数据A但不可以修改,其他事务可以读数据A加S锁来读取,只要数据A上有共享锁,任何事务只能对其加共享锁,而不能加排它锁来修改。
4、封锁协议
4.1 封锁协议的作用
因为数据库加锁可以限制其他事务对数据的操作,但会降低事务的并发性,这个时候可以采用封锁协议来保证事务的一致性前提下尽可能提高并发性。封锁协议是对数据加锁类型、加锁时间、释放锁时间的一些规则的描述。
常用的封锁协议:一级封锁协议、二级封锁协议、三级封锁协议。
一级封锁协议:主要是指事务T在修改数据A之前必须先对其加上排它锁,直到事务结束后才能释放排它锁。一级封锁协议使得在一个事务修改数据期间,其他事务不能对该数据进行修改,只能等该事务结束之后,主要解决了丢失修改的问题。
二级封锁协议:主要是在一级封锁协议加上事务T在读取数据A之前必须对其加上共享锁,读取完成后释放共享锁。二级封锁协议使得一个事务不能读取被其他事务修改中的数据。解决了数据脏读的问题。但事务T如果读取数据A之后,其他事务再对A做完修改,事务T再去读取A,会产生不可重复的错误。
三级封锁协议:主要是在一级封锁协议加上事务T在读取数据A之前必须对其加上共享锁,读取完成后释放共享锁,直到事务结束后才释放共享锁。这样就解决了二级封锁协议的不可重复读的问题。
IT技术分享社区
个人博客网站:https://programmerblog.xyz
文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识