本帖最后由 x_wy46 于 2013-01-14 14:33:35 编辑

解决方案 »

  1.   

    Oracle 任何的事务操作 不会阻塞查询。
      

  2.   

    那类似于这样一个操作,是怎么执行的?
    第一步:select max(id),
    第二部:利用第一步生成的max(id)做为id插入到表中那么当正在执行第二步时候,另外一个用户select max(id),会不会造成重复的ID呢?
      

  3.   

    oracle和sqlserver事务处理机制不同。
    sqlserver中如果一个事务的insert语句还没有提交,另外一个事务试图取max(id)时会被阻塞,因为他默认是读取所有已提交事务,确保了全局一致性。oracle的话即使有一个事务的insert没有提交,另外一个事务取max(id)时会取那条insert之前的数据库的maxid。
    insert提交以后,你取到的那条id已经不是目前数据库的最大id了。多个事务一起读取会产生重复问题。
    但你如果只是想insert之后取刚才insert的那个id,这么写是没问题的,这次insert的记录确实是本次事务中的maxid。
      

  4.   


    那不就是没法先取max(id)再insert了
      

  5.   

    是的,oracle中不建议maxid这种写法,要么是用sequence自增,要么是guid