for update [of] 语句

本文详细介绍了SQL的for update of语句的使用,包括锁定整个表、单行记录、多表以及指定列。通过示例展示了如何在多表连接中精确控制锁定的范围,并讨论了for update nowait、wait和skip locked选项的应用,帮助理解在并发事务处理中的锁定策略。

for update 是把所有的表都锁定for update of 根据of 后表的条件锁定相对应的表

--1.锁定整个表

SELECT * FROM emp for UPDATE;

--2.锁定表的单行记录

SELECT * FROM emp a WHERE a.empno='7369' for UPDATE;

--3.锁定两个表

SELECT * FROM emp a,dept b WHERE a.deptno=b.deptno for update;

--4.之锁定of后面指定的表

SELECT * FROM emp a,dept b WHERE a.deptno=b.deptno for UPDATE OF a.empno;

--5.之锁定emp表指定的行

SELECT * FROM emp a,dept b WHERE a.deptno=b.deptno WHERE a.empno='7369' AND a.deptno=b.deptno OF a.empno;

 

使用for update of column对单表操作时,与for update是一样的效果,但

for update of columns 用在多表连接锁定时,可以指定要锁定的是哪几张表,而如果表中的列没有在forupdate of 后面出现的话,就意味着这张表其实并没有被锁定,其他用户是可以对这些表的数据进行update操作的

 

关于

SELECT * FROM gumengkai.emp for UPDATE NOWAIT;

当有其他事务锁时,该语句将会立即返回异常信息,而不会无限制的等待

SELECT...FOR UPDATE 语句的语法如下:
SELECT ... FOR UPDATE [OFcolumn_list][WAIT n|NOWAIT][SKIP LOCKED];

如:

SELECT * FROM gumengkai.emp for UPDATE WAIT 5;

等待6秒后,显示异常

 

SELECT * FROM gumengkai.emp for UPDATE SKIP LOCKED;

在执行sql时,既不等待,也不报异常

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值