我在PL/SQL中使用delete from table_name 删除表中的数据,按F8执行后,数据删除.
上面的操作是不是相当于truncate table_name.delete 在F8后要执行 commit吗,我没用commit 也发现数据被清除了.请高手指点一下.

解决方案 »

  1.   

    delete from table_name = truncate table table_namedelete from table_name操作记录进日志.
    truncate table table_name操作不进入日志.delete 要执行 commit.否则数据并没有被删除,还可以rollback
      

  2.   

    单条执行要COMMIT,在存贮过程中就不要了。
      

  3.   

    我也是初学.说下我个人的看法.pl/sql 中 普通dml语句(truncate table除外) 执行时都隐式开始一个事务, 除非显示看到commit,或用户断开,或rollback之类,才结束这个隐式的事务.在你的pl/sql窗口中(窗口1)
    你执行了 delete from table_name
    没有进行 commit
    然后 select from table_name
    而看到表中没有记录了,这是假像, 因为你仍在同一个事务中.你可以尝试,新开一个pl/sql窗口(窗口2), 再执行 select * from table_name 发现记录还在.因为窗口1中做的操作没有提交.在你在窗口1中执行 commit;
    然后再看窗口2中的select .. 这时才是真的没有数据.
    在你的窗口1没有commit 之前,你执行 rollback;
    再select ,可以看到你的数据还在,因为操作被回退了.而truncate table 清表, 是不能回退的, 即, 你在窗口1,执行了 truncate table_name
    在窗口2查询时,查不到记录.
    说到这里吧, 具体的请参见相关文档.
      

  4.   

    delete 要写日志的。如果删错了的话可以恢复的
    truncate不写日志的。删掉的数据是不能恢复的你可以用show all查看auto commit是不是等于on。 如果是的话就是自动提交。如果是off的话就要手动提交的
      

  5.   

    delete 后如果没有执行COMMIT的话,可以执行ROLLBACK来恢复数据
    truncate 后的数据没有办法恢复