+ -
当前位置:首页 → 问答吧 → select * from table for update 和一般的update table set 有什么区别?

select * from table for update 和一般的update table set 有什么区别?

时间:2011-09-08

来源:互联网

1.  update zk set  count2='1'  where table_name='BBOSS_CODE_DATA' --未提交
2.   update zk set  count3='1'  where table_name='BBOSS_CODE_DATA' ---等待

不同列一样会等待 一样会锁表

一 select count2 from zk  where table_name='BBOSS_CODE_DATA' for update  --未提交
二 select count3 from zk where table_name='BBOSS_CODE_DATA' for update   --等待

我们经常说 select * from table for update  危害数据库那么select * from table for update 和一般的

update table  set 有什么区别?还有 select t.* ,t.rowid from table 又有什么区别??
谁能告诉我???

[ 本帖最后由 刚在路 于 2011-9-8 15:05 编辑 ]

作者: 刚在路   发布时间: 2011-09-08

1.危害数据库?不知道你是从哪看的~
那只不过是一种锁机制而已~“悲观锁”
这些问题我觉得看看书和document都能解决~很基础也很重要

作者: iori809   发布时间: 2011-09-08

1.  update zk set  count2='1'  where table_name='BBOSS_CODE_DATA' --未提交
2.   update zk set  count3='1'  where table_name='BBOSS_CODE_DATA' ---等待

不同列一样会等待 一样会锁表

update会产生行级锁,你这个例子是同一行的不同列,当然会等待了。
你如果更新不同的行,就不会等待了。

作者: crous   发布时间: 2011-09-08

谢谢回复
   原厂工程师巡检时 提供的数据库健康报告里 明确提出 严禁在生产库使用 select * from table update 锁表操作

作者: 刚在路   发布时间: 2011-09-09

我觉得是这样~严禁使用是你的环境不允许~但不能说他是有害的~
这是两个概念~

作者: iori809   发布时间: 2011-09-09

锁表和锁行不是一个概念,select * from table for update,这样锁表当然有危害性了,但是你加入限制条件就是一种正常的锁定机制了

作者: deepshrift   发布时间: 2011-09-09

用途不一样

作者: 我上面有人   发布时间: 2011-09-09

去看看ACID,明显用的场合不同

作者: dingjun123   发布时间: 2011-09-09

我很好奇 为什么他没提  不带限制条件的修改?update table set。。。 这个跟select * from table for update 没什么区别嘛。。

顺便发个牢骚  个别oracle原厂的工程师态度不怎么滴  问个问题 都不耐烦了   搞不懂他们一天在想什么  把我们教好了 不就少找他们麻烦了吗

作者: 刚在路   发布时间: 2011-09-09

少了他们麻烦,他们赚什么钱啊,真晕

作者: dingjun123   发布时间: 2011-09-09