______封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
核心规则:
写操作:修改数据前必须加排他锁(X锁),事务结束后释放。
读操作:读取数据前必须加共享锁(S锁),读取后立即释放(不等待事务结束)。
解决的问题:
防止脏写(Dirty Write)和脏读(Dirty Read)。
未解决的问题:
不可重复读(Non-Repeatable Read):因共享锁在读后立即释放,其他事务可能在两次读之间修改数据。
隔离级别:读已提交(Read Committed)。
写操作:修改数据前加排他锁(X锁),事务结束后释放。
读操作:读取数据前加共享锁(S锁),事务结束后释放。
脏写、脏读、不可重复读。
幻读(Phantom Read):其他事务可能插入或删除符合查询条件的记录。
隔离级别:可重复读(Repeatable Read)。
增长阶段(Growing Phase):事务可以不断加锁(S锁或X锁),但不能释放任何锁。
缩减阶段(Shrinking Phase):事务可以释放锁,但不能加新锁。
保证事务的可串行化(Serializability),即并发执行结果与某一串行顺序执行等价。
缺点:
可能导致死锁(多个事务互相等待锁释放)。
无法避免幻读(需结合范围锁或谓词锁)
一级封锁协议(First-Level Locking Protocol) 是数据库事务管理中用于实现并发控制的基础机制,属于封锁协议(Locking Protocol)的一种。它通过简单的锁规则防止事务间的脏写(Dirty Write)问题,但无法完全保证数据一致性。以下是详细解析:
写操作加锁
事务在修改数据项前必须获得该数据项的排他锁(Exclusive Lock, X锁)。
排他锁的作用:禁止其他事务对该数据项进行任何读写操作,直到当前事务释放锁。
锁的释放时机
排他锁在事务**提交(Commit)或回滚(Rollback)**后释放。
不支持“锁提前释放”,即事务未结束前,锁必须持续持有。
读操作无限制
事务在读取数据时无需加共享锁(Shared Lock, S锁),允许读取未提交的数据(可能引发脏读)。
防止脏写(Dirty Write) 通过排他锁确保两个事务无法同时修改同一数据项,避免覆盖未提交的修改。
脏读(Dirty Read) 事务可能读取到其他事务未提交的中间结果(因读操作未加锁)。
不可重复读(Non-Repeatable Read) 同一事务多次读取同一数据项时,可能因其他事务的修改导致结果不一致。
幻读(Phantom Read) 事务读取某个范围的记录时,其他事务插入或删除记录,导致前后结果不一致
一级
用户登录可进行刷题及查看答案
登录后提交答案