for update [of] 语句

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时,既不等待,也不报异常

 

你可能感兴趣的:(for update [of] 语句)