Posted on 2011-05-22 12:12
kangaroo 閱讀(293)
評論(0) 編輯 收藏
先簡單回顧下sql語言的幾種語言:ddl,dml,dcl,它們分別是:
ddl即data definition language,例如常用的:create,alter,drop,truncate,grant,revoke,comment;
dml即data manipulation language,我們經常使用的:select,insert,update,delete等都是數據操作語言。
dcl即data control language,數據控制語言,平時基本用不到,如commit,savepoint,rollback,set transaction。
所以區別主要在:
- delete是dml語句,這個操作使用放在rollback segement里,事務提交后才生效,是可以回滾的;truncate是ddl語句,它不在rollback segement里的,事務自動提交,操作立即生效,沒有回滾一說,除非自身失敗;
- 還有一個關鍵,雖然truncate是數據定義語言,但是truncate和delete操作一樣,都只刪除數據不刪除表結構,兩者的主要區別在于,truncate操作是沒有備份的,所以它執行速度比delete快;而另一個ddl語句drop,將刪除的是結構包括被依賴的觸發器,索引,約束,依賴該表的存儲過程會被保留。剛才又搜索了下truncate和drop操作之后數據也還是可以找回來的:http://dbsnake.com/2010/06/truncate-drop-recovery.html