锁的种类
数据库系统本身的锁机制
1、共享锁(Shared Lock) select这种
2、更新锁(Update Lock) update 这种
3、排他锁(Exclusive Lock):update set xx=c where id="3" 这种
4、意向锁(Intent Lock):对表进行加锁。
5、模式锁(Schema Lock):Altert table
6、批量更新锁(Bulk Update Lock):数据库备份恢复
业务级别上的锁机制,如Hibernated的锁机制:
- 悲观锁:利用数据库本身的锁机制实现。通过上面对数据库锁的了解,可以根据具体业务情况综合使用事务隔离级别与合理的手工指定锁的方式比如降低锁的粒度等减少并发等待。
- 乐观锁:利用程序处理并发。原理都比较好理解,基本一看即懂。方式大概有以下3种
- 对记录加版本号.
- 对记录加时间戳.
- 对将要更新的数据进行提前读取、事后对比。
不论是数据库系统本身的锁机制,还是乐观锁这种业务数据级别上的锁机制,本质上都是对状态位的读、写、判断。
下表是锁的兼容或冲突情形。
现有 S U X
请求
S Y Y N
U Y N N
X N N N
现有 | S | U | X | |
申请 | ||||
S | Y | Y | N | |
U | Y | N | N | |
X | N | N | N |
oracle: