规则 6.12:禁止在PL/SQL Developer等工具中执行select * from t_tablename for update,然后点击锁图标方式,再编辑数据的方式进行更新数据库中的数据。在书上看到这句话,但我以前一直在用这种方式啊,敢问这种方式有什么弊端啊?有对数据库比较了解的,能给详解一下吗?……谢谢

解决方案 »

  1.   

    你这种做法没有什么不对的,只是说for update 对表加了一个表级的共享锁,只准其它session查询
    当你如果只需要修改一条记录的时候,for update 就不是很好了,因为你只改一条记录,却把整个表都锁起来,没必要,一般只需加个行级锁就可以了
    你明白了吗?
      

  2.   

    我也觉得没什么不妥的,只是会影响dml的执行。  
    在就改完后记得提交不就没事了。
      

  3.   

    http://blog.csdn.net/annicybc/archive/2007/04/30/1592737.aspx
      

  4.   

    语句是没错,只是把表锁住了,如果你一直这样不释放锁,别的session想修改表数据的话就卡住了,
    你可以用select t.*,t.rowid from t 这种方式修改数据,这样只会锁住要修改的那部分
      

  5.   

    使用where限定需要修改的数据,尽量避免锁表,不然你狠容易给别人造成困扰.
      

  6.   

    for(int i = 0 ; i<100 ; i++){
      System.out.println("加"+i+"分");
    }
      

  7.   

    for update  ??
    千万别这么做,加的是排它锁。锁的最高级别
      

  8.   

    其实没有什么不好。。只是对表上加了锁吧了。。不过最好不要用。。用rowid进行。。
      

  9.   

    如果那个语句加上Where条件的话,锁的是表还是据Where搜索出的语句啊!还是共享锁吗?
      

  10.   

    如果只是做开发,自己玩玩,使用这种SQL没有问题,但是如果在生产系统上使用这种SQL,就会由于忘记及时提交而锁表,引起业务系统挂死而无法使用,我们已经禁止使用这种SQL,人为故障也大大减少。