update tablename set a=1  where b=1
delete from tablename where b=1
insert into tablename values(1,2,3,4)哪条产生的undo多?为什么?

解决方案 »

  1.   

    一般情况下
    insert语句产生undo最少
    ,其次是update ,最后是delete因为undo逻辑上要产生相反的sql的语句:比如你insert ,undo就产生delete
      

  2.   

    查了下书:
    详细的解释 
    对insert语句,undo只要记录下刚插入的rowid ,对update ,undo要记录被更新的字段的旧值,对delete ,undo刚必须记录下整行数据
      

  3.   

    常INSERT产生最少的Undo,Update产生的Undo居中,而Delete操作产生的Undo最多。对于INSERT操作,回滚段只需要记录插入记录的rowid,如果回退,只需将该记录根据rowid删除即可;
    对于UPDATE操作,回滚段只需要记录被更新字段的旧值即可(前镜像),回退时通过旧值覆盖新值即可完成回退;
    对于DELETE操作,Oracle则必须记录整行的数据,在回退时,Oracle通过一个反向操作恢复删除的数据。