打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle笔记- Oracle的锁_权记 -- 向往远方
为什么要用锁:

多个用户同时对数据库进行操作的时候会产生冲突;锁可以防止多用户并行

的访问冲突;



//Sql-Plus的查看当前用户的命令:show user;

//Sql_Plus的修改提示符的命令:set sqlprompt ....>;



当另一个用户进行的操作还在缓冲区中,还没有commit的时候,

也就是另一个用户的事务没有结束的时候,本用户的对于同一个

资源的操作就会被挂起操作就会被阻塞;

这里所说的同一个资源叫做共享资源:

不仅指数据库行,而且也指其他的资源,如表;

当对同一资源进行操作的时候系统会自动加锁阻塞其中的

一个;但是当两个用户同时对一个表中的不同行进行操作的

时候,因为它们并没有同时对一个行资源进行更新,所以

系统并没有自动加锁来阻塞其中的一个用户;所以我们似乎可以

看到系统所认为应该自动加锁的资源是行,而不是表;那么如果

我们不想出现这种交叉修改的局面,是不是可以手动对整个表

进行加锁呢?

所以我们发现有两种类型的锁:

行级锁:tx

行被排他锁定;

在某行的锁被释放之前,其他用户不能修改此行;

使用commit或者rollback命令释放;

使用insert,update的时候自动被上锁;

用select ...for update语句获得行级锁:被加锁的对象是所有

被select 到的行;

防止其他用户修改此行,但可以查询;

具体的形式为:

如果锁定所有列:select..for update;

锁定特定列:select ..for update of ename;

不合理的是:当一个用户锁定时,别的用户不知道,只会等;

所以用select ..for update wait(second):

超过secong秒后加锁的用户还没有解锁的话,

其他等待也尝试加锁的的用户就会得到一个错误信息;



表级锁:tm

可以设置为三种模式:Lock table userID.tablename in [] mode;

共享:其他用户只能查询,不能更新,删除,插入;

多个用户可以同时对同一个表设置共享锁;



共享更新:in share update mode;

锁定要被更新的行,其他用户可以同时查询,

插入,更新未被锁定的行,即未被更新的行;

等于select..for update;

允许多个用户同时锁定表中不同的行;

排他:

仅允许其他用户查询,不允许插入,删除,更新;

在同时间仅允许一个用户在表上放置排他锁;

如果加上nowait的话,如果发现该表已经被锁定,

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
oracle for update和for update nowait的区别
Oracle中的select for update 用法(转)
oracle锁表
事务的乐观锁和悲观锁
select for update和select for update wait和select for update nowait的区别
Oracle PL/SQL开发基础(第二十八弹:使用锁定)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服