select * from tab where ..... for update nowait

简介:
大家在使用plsqldeveloper时 ,修改数据的时候比较喜欢 select * from tab for update ,然后开始修改数据
这种模式比较容易锁住数据,有的时候还出现自己锁住自己的事情(自己有开了个窗口用了select * from tab for update )
我个人推荐大家在修改数据的时候用 select * from tab where ..... for update nowait; 大家都用这个,否则效果会打折扣。
例子:
下图如果两个人都使用 select * from tab for update ,那么必定有一个人被锁住

select <wbr>* <wbr>from <wbr>tab <wbr>where <wbr>..... <wbr>for <wbr>update <wbr>nowait

如果用select * from tab where ..... for update nowait; ,会直接报错(ora-00054),而不会锁住,避免了自己锁定自己,同时也告诉别人这个数据我在改了,请您等等再该

原文地址:http://blog.sina.com.cn/s/blog_4ea0bbed0100vhvz.html


目录
相关文章
|
6月前
|
关系型数据库 索引
select for update 含义
select for update 含义
|
6月前
|
关系型数据库 MySQL 数据库
INSERT IGNORE与INSERT INTO的区别
INSERT IGNORE与INSERT INTO的区别
|
SQL 数据库
INSERT DESC UPDATE SELECT
INSERT DESC UPDATE SELECT
97 0
|
数据库 OceanBase
使用 `INSERT INTO table_name SELECT * FROM table_name` 这种方式
使用 `INSERT INTO table_name SELECT * FROM table_name` 这种方式
73 1
|
数据库 OceanBase
INSERT INTO table_name SELECT * FROM table_name
INSERT INTO table_name SELECT * FROM table_name
59 1
|
SQL 关系型数据库 MySQL
Select for update使用详解
前言 近期开发与钱相关的项目,在高并发场景下对数据的准确行有很高的要求,用到了for update,故总结一波以便日后留恋。 for update的使用场景 如果遇到存在高并发并且对于数据的准确性很有要求的场景,是需要了解和使用for update的。 比如涉及到金钱、库存等。一般这些操作都是很长一串并且是开启事务的。如果库存刚开始读的时候是1,而立马另一个进程进行了update将库存更新为0了,而事务还没有结束,会将错的数据一直执行下去,就会有问题。所以需要for upate 进行数据加锁防止高并发时候数据出错。
2317 0
|
存储 关系型数据库
|
关系型数据库 MySQL 索引
浅谈create table as 和 insert into select 复制表遇到的问题
之前做一次表压缩测试,在准备原表时需要数据量比较大的表,通过insert into select 的方式将几个表的数据复制到一个表,产生的一些问题~
3238 0