第三章锁和表分区
1、 锁的概念:
锁是数据库用来控制共享资源并发访问的机制; 锁用于保护正在被修改的数据;
直到提交或回滚了事务之后,其他用户才可以更新数据。
2、 加锁的条件:资源可能会被共享;可能会并发;数据会被修改。 3、 加锁和释放锁的时机:
释放锁时机:提交/回滚事务后。 加锁时机: 悲观锁:一开始事务就加锁,直到事务完成才释放(并发机会大,用悲观锁)。 乐观锁:只有当提交事务时才加锁(并发机会少,一般用版权号控制)。 4、 锁的释放:要么提交或回滚;要么超时(自动释放);要么PMON/SMON释放。 5、 锁定的优点:
A、 一致性:一次只允许一个用户修改数据; B、 完整性:为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修
改将反映给所有用户; C、 并行(发)性:允许多个用户访问同一数据。 6、 锁的类型:
A、 数据库锁:锁定数据库; B、 表空间锁:锁定表空间。如脱机; C、 表级锁:锁定表,手工锁;
D、 行级锁:锁定行,是Oracle数据库的默认锁,自动锁。
7、 行级锁:对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行 行级锁是一种排他锁,防止其他事务修改此行(insert、update、delete、select * from 表名 for update)。
如果没有把数据查询出来进行更新,增删改都能完成命令,但是不能提交,查询的话,只能查出之前提交完成的数据:
只有提交了之后,才能显示全部数据,因为存在悲观锁,进行锁定:
现在,对给定行锁定:
结果,另外一个用户进行修改时,则进入等待状态:
提交之后,才能更改:
对锁定行删除也是会进入等待:
提交后,才能删除:
注:行级锁升级为表级锁:
提交之后,锁解开,可修改:
另一用户不提交,则这边用户处于等待:
提交之后才可以修改。
如果加锁,设置为等待时间或不等待:
提交之后,则可加锁:
8、 表级锁:
语法:LOCK TABLE 表名 IN 表的模式类型 MODE 表的模式类型:

