现在对一个表进行查询操作,由于是个大数据量且查询后有一系列的操作,故想到了用锁的方法,请各位大侠帮忙,如何对一段查询结果加锁和解锁。
如对表中的1~100条加锁解锁,101~200条加锁解锁

解决方案 »

  1.   

    select  *
        from a
       where 条件
       and rownum<=100
     for update不过如果是101-200条,需要两层SQL,把rownum转换成实列
      

  2.   

    其实我的想法是通过多线程去对同一个表操作。为了避免操作的重复及得到数据计算的混淆估想到的锁。 
    如: 
    线程1在查询当前表中的前100条数据时得到的是ID 1~100 
    线程2在查询当前表中的前100条数据时得到的是ID 101~200 
    线程2在查询当前表中的前100条数据时得到的是ID 201~300 
    ... 
    如果不能用锁,有什么其他好的解决方案吗?
      

  3.   

    to:doer_ljy 
    能不能针对行级排它锁,用简单的代码或者思路说明一下呢,感激不尽
      

  4.   

    1、选出结果的时候使用1楼的语句把选出的结果lock住。
    不过建议加上nowait,即for update nowait。
    如果这个查询返回异常,说明选中的记录中有已经被错定的纪录。
    如果没有返回异常,说明枷锁成功。
    2、加锁成功后更新选中的纪录,更新语句没有什么不同。只要你不提交事务,所选中的那些行不会被其他线程改写。
    3、提交事务。