加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle多用户同时修改同一记录,怎样保证该客户记录

发布时间:2020-12-12 14:57:33 所属栏目:百科 来源:网络整理
导读:首先你要了解什么叫做 “事务 transcation ” :一个事务包含一个或多个DML语句,是逻辑管理的工作单元(原子单元)。 注意:其中Commit,Rollback是显示的提交事务,而DDL语句是隐式的提交事务的。DDL语句的操作是没有办法回滚的。 当用户对数据进行修改时(
首先你要了解什么叫做 “事务 transcation ” :一个事务包含一个或多个DML语句,是逻辑管理的工作单元(原子单元)。  
注意:其中Commit,Rollback是显示的提交事务,而DDL语句是隐式的提交事务的。DDL语句的操作是没有办法回滚的。

当用户对数据进行修改时(DML操作),oracle会给数据分配两个 锁 ,一个是行排他锁 另一个是表共享锁
行排他锁:如果A用户对某个表的某一行进行修改时,会把该行分配一个”行排他锁“

这样B用户就只能查看 不能修改了。但是B用户看到的数据确实老数据 , 那是因为A用户还没有结束该事务,换句话说A用户拿到了修改该行的所有权,但是怎么修改,修改之后会不会反悔 这些都是在A 提交该事务之前的 仅属于他个人的事情
而为了保证所有用户所看到数据的一致性, 在A用户 提交事务之前 大家看到的数据都是 老数据

举个例子:
1. 最开始 谁也没要修改的时候,数据是这样的:
SQL> select empno,ename,sal from emp where empno= 7900;
EMPNO ENAME SAL
---------- ---------- ----------
7900 JAMES 950

2. A用户进行修改了,她就拿到了 这行的锁:
SQL> update emp set sal=6000 where empno=7900;
1 row updated.

SQL> select empno,sal from emp where empno= 7900;
EMPNO ENAME SAL
---------- ---------- ----------
7900 JAMES 6000
现在只有A用户能够查看到,修改后的数据。

3. B用户进行查看:
SQL> select empno,191); text-decoration:none">JAMES 950

4. B用户进行修改:
SQL> update emp set sal=6000 where empno=7900;
......... 没有任何动静,因为该会话在等待A用户的提交。 过了十分钟后,A用户提交了 那么B立刻就抢到了这把锁。

”如果多个用户同时修改同一客户记录,而且先后提交修改,Oracle 怎样保证该客户记录“ 就像按抢答器一样,就看是谁先得到这把”锁“

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读