今天我发现一直在犯一个错误……大家以此为戒啊…… 规则 6.12:禁止在PL/SQL Developer等工具中执行select * from t_tablename for update,然后点击锁图标方式,再编辑数据的方式进行更新数据库中的数据。在书上看到这句话,但我以前一直在用这种方式啊,敢问这种方式有什么弊端啊?有对数据库比较了解的,能给详解一下吗?……谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这种做法没有什么不对的,只是说for update 对表加了一个表级的共享锁,只准其它session查询当你如果只需要修改一条记录的时候,for update 就不是很好了,因为你只改一条记录,却把整个表都锁起来,没必要,一般只需加个行级锁就可以了你明白了吗? 我也觉得没什么不妥的,只是会影响dml的执行。 在就改完后记得提交不就没事了。 http://blog.csdn.net/annicybc/archive/2007/04/30/1592737.aspx 语句是没错,只是把表锁住了,如果你一直这样不释放锁,别的session想修改表数据的话就卡住了,你可以用select t.*,t.rowid from t 这种方式修改数据,这样只会锁住要修改的那部分 使用where限定需要修改的数据,尽量避免锁表,不然你狠容易给别人造成困扰. for(int i = 0 ; i<100 ; i++){ System.out.println("加"+i+"分");} for update ??千万别这么做,加的是排它锁。锁的最高级别 其实没有什么不好。。只是对表上加了锁吧了。。不过最好不要用。。用rowid进行。。 如果那个语句加上Where条件的话,锁的是表还是据Where搜索出的语句啊!还是共享锁吗? 如果只是做开发,自己玩玩,使用这种SQL没有问题,但是如果在生产系统上使用这种SQL,就会由于忘记及时提交而锁表,引起业务系统挂死而无法使用,我们已经禁止使用这种SQL,人为故障也大大减少。 请教Berkeley DB数据库的使用和开发 oracle初学者,数据查询问题 怎么解决,重复数据合并到结果集的某一条记录中 Oracle数据批量拷贝 用数组作为oracle参数该怎么写? PL/SQL中,我要从循环体内返回到循环头,即相当于其它程序语言中的continue,该怎么写? 请有经验的大侠指点:如何管理alert_*.log文件? 分布式应急系统 oracle错误: ORA-01157:?????? 为什么? Oracle数据更新 使用PL SQL PL/SQL问题
当你如果只需要修改一条记录的时候,for update 就不是很好了,因为你只改一条记录,却把整个表都锁起来,没必要,一般只需加个行级锁就可以了
你明白了吗?
在就改完后记得提交不就没事了。
你可以用select t.*,t.rowid from t 这种方式修改数据,这样只会锁住要修改的那部分
System.out.println("加"+i+"分");
}
千万别这么做,加的是排它锁。锁的最高级别