ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于锁的小实验

关于锁的小实验

原创 Linux操作系统 作者:liwenrongdba 时间:2012-03-25 15:31:26 0 删除 编辑

上午在看书的时候,突然想到可以对锁做一个小实验,实验如下:

实验环境:Windows 7 操作系统、ORACLE 11g

实验操作:打开一个sqlplus 窗口,一个PL/SQL Developer窗口,其中在sqlplus窗口对SCOOT 用户的BOOK表的B# = 2001232BLOAD列进行更新操作,将BLOAD改为,但暂时不提交所作的修改,实验代码如下:

--先查询一下book表的状态

select * from book;

 

B#                   ISBN          BLOAD BADD

-------------------- ------------- ----- --------------------------------------------------------------------------------

2001232              7040195836        

1005050              9787506336239     

1005063              9787508040110     

3007071              9787010073750     

20021213                               

--确认我们要更新的行,执行更新操作

SQL>Update book

SQL>Set bload = 

SQL>Where B#= 2001232;

SQL>已更新一行

--更新成功,但此时还没有提交操作

--我们再在PL/SQL Developer执行查询操作,看是否能够查询,结果显示可以查询。

SQL>SELECT * FROM book;

--再在PL/SQL Developer窗口中执行同样的操作,代码如下

SQL>Update book

SQL>Set bload = 

SQL>Where B# = 2001232;

--窗口显示操作一直处于执行状态,原因是因为两个窗口更新的是同一行的同一列,而前一个操作锁定了要进行更新的那一行,由于它还没有提交操作,所以加在那一行上面的锁还没有被释放,任何其他对该行的操作都将被禁止,但是可以查询,直到他提交了所做的更新,释放锁之后才行。

--下面我提交第一个更新操作

SQL>Update book

SQL>Set bload = 

SQL>Where B#= 2001232;

已更新一行

SQL>commit;

提交完成

之后再看第二个更新操作的状态,已变为已更新一行

SQL>Update book

SQL>Set bload = 

SQL>Where B# = 2001232;

1 row updated

扩展一下:我第二次更新还没有提交,我又在sqlplus窗口里执行第三次更新操作,还是同一行但是是不同的列,那么会不会得到同样的结果呢?

实验结果与上面一样,说明ORACLE在用户对某一张表上每个记录进行更新操作的时候,ORACLE将要更新的那一行加上了锁,也就是行锁,此行锁将阻止一切对该行的操作除了查询操作。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26500857/viewspace-719477/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: oracle函数的使用
请登录后发表评论 登录
全部评论

注册时间:2012-03-03

  • 博文量
    3
  • 访问量
    4710