数据库的2PL两段锁协议与范式
1.2PL
2PL定义:1.所有的读写操作之前均需加锁;2.解锁操作后不允许再出现加锁操作;
S锁:加S锁后其他事务可读,不可写,直至加锁事务结束;
X锁:加X锁后其他事务均不可以读或写,直至事务结束;
事务执行的过程分为两个阶段,一是获得封锁阶段,二是释放封锁阶段;2PL可能产生死锁;
2PL可以防止读脏数据、丢失修改等;是事务可串行化的必要条件,不是充分条件;
可串行化:多个操作并发执行时,如不进行并发控制,可能出现错误的结果。但如果把所有并发操作全部串行执行,又失去了并发操作的优势。所以提出了可串行化的概念。可串行性:当且仅当一组事务的交叉执行结果与某一串行执行的执行结果一致时,这组事务具有可串行性;
2.一级锁、二级锁、三级锁
一级锁:所有写操作之前加X锁,事务结束释放,可以防止丢失修改;
二级锁;所有写操作之前加X锁,事务结束释放;所有读操作前加S锁,操作结束释放,可以防止丢失修改和读脏数据;
三级锁:所有写操作之前加X锁,事务结束释放;所有读操作前加S锁,事务结束释放,可以防止丢失修改、读数据和不可重复读;
二、范式
第一范式:属性不可分;
第二范式:所有非主属性完全依赖于码;
第三范式:符合2NF,同时没有传递依赖;
BC范式:符合3NF,且主属性不依赖于主属性;即若R属于1NF,且所有属性不传递依赖于码;每个非平凡依赖关系的左边均包含键码;每个依赖关键的决定因素必须包含键码;
4NF:要求把同一表内的n:m的关系删除;
本文出自 “江南矿工技术空间” 博客,请务必保留此出处http://jncumter.blog.51cto.com/812546/1782525
文章来自:http://jncumter.blog.51cto.com/812546/1782525