oracle数据库中for update 和for update nowait 的区别
首先,我们打开一个session
更新employee_id 为1000的员工,将其姓名改为’aaa’,语句如下:
UPDATE EMPLOYEES SET EMPLOYEES.LAST_NAME='aaa' WHERE EMPLOYEES.EMPLOYEE_ID=1000
此时不要将数据进行提交。
我们再另外打开一个session,查询该员工的相关信息
-
不加for update 或者是 for update nowait,语句如下:
select * from EMPLOYEES WHERE EMPLOYEE_ID=1000;
此时查询到的是之前的数据,而不是另一个session修改后的数据。 -
加 for update 语句,语句如下:
select * from EMPLOYEES WHERE EMPLOYEE_ID=1000 for update;
此时,系统在循环等待,直到另一个session将事务提交或者回滚时,会将查询出的数据显示出来。 -
加 for update nowait 语句,语句如下:
select * from EMPLOYEES WHERE EMPLOYEE_ID=1000 for update nowait;
由于另一个session 用户没有将事务提交或者回滚,系统不进行等待,直接显示资源正忙。
over ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~