您的位置:首页 > 其它

for update [of] 语句

2016-03-24 21:21 966 查看
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时,既不等待,也不报异常

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: