Posted on 2011-05-22 12:12
kangaroo 阅读(283)
评论(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