数据库的锁 封锁等级一. 基本概念
oracle数据库中有四种锁,一种为排他锁和共享锁,加了排他锁之后数据库无法被他人读取或者修改,加了共享锁可以被读取但是无法修改。
数据库锁可以分为几类: DML锁用于保护数据完整性,DDL锁保护数据库对象的结构,内部锁用来保护数据库的内部结构 。
DML锁又可以分为TM锁和TX锁,其中TM锁称为表级锁,TX称为事务锁或者行级锁,此种类型的锁一般都自动产生,当数据库发生TX锁等待时,不及时处理会导致oracle数据库挂起,或者死锁的产生(ORA-60)
举例:如何使悲观锁发挥作用(排他锁)
select * from tab1 for update
select ..for update (nowait)用来检测数据行是否被锁
此时其他用户在对数据库进行dml或者ddl操作时都会返回错误信息ORA -00054,oracle建议使用悲观锁,乐观锁在select并update完成的这段时间内依然可能会被修改。
oracle事务的封锁等级:
一级:事务T在修改数据的时候对其加x锁,在修改完以后解锁,同时可以恢复事务T。
二级:在一级协议的基础上,事务T在读取数据前就加上s锁,在读取完成后再释放,避免了脏数据。
三级:在一级协议的基础上,事务T在读取数据之前就加上s锁,在事务解释后才会释放,避免了脏数据,保证数据可恢复,同时防止了不可重复读。
以上为事务锁,封锁机制的基础知识,后续详细解释 锁如何实现事务的隔离控制