A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 翟盼盼 高级黑马   /  2013-3-9 14:42  /  2362 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

truncate  和delete在删除数据的时候有什么不同?  求解释

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

6 个回复

正序浏览
1、DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。
2、DELETE和TRUNCATE TABLE的最大区别是DELETE可以通过WHERE语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。
3、DELETE FROM table1,清空了表里面的数据。TRUNCATE  TABLE,将整个表给删除了。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
1.DELETE
 ・DML语言
 ・可以回退
 ・可以有条件的删除
     DELETE FROM 表名
   WHERE 条件

2.TRUNCATE TABLE
 ・DDL语言
 ・无法回退
 ・默认所有的表内容都删除
 ・删除速度比delete快。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
truncate效果等同于不带where的delete,delete删除时要详细记录事务日志,而truncate只记录truncate操作,不记录具体数据操作,所以truncate操作要比delete快得多但是一旦用了truncate很难进行数据库恢复。执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,请使用 DROP TABLE 语句。
如果表包含标识列,该列的计数器重置为该列定义的种子值。如果未定义种子,则使用默认值 1。若要保留标识计数器,请使用 DELETE。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
  truncate  和delete
相同:1.二者均删除表中的全部行。
不同:1.truncate删除表比较快,但删除的数据不能恢复,只能删除表中的所有数据。2.delete删除比truncate慢,删除的数据可以恢复。3.delete from后面可以写 条件,truncate不可以。3.truncate在各种表上无论是大的还是小的都非常快。4.truncate是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对truncate使用roolback命令。5.truncate不能触发任何delete触发器。6.不能授予任何人清空他人的表的权限。7.当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。8.不能清空父表。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
http://technet.microsoft.com/zh-cn/library/ms177570.aspx看下这个
还有 别忘了 强大的 联机丛书,没有什么比上面的更权威,更详细了.

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
Delete:用于删除表中的行(注:可以删除某一行;也可以在不删除表的情况下(即意味着表的结构、属性、索引完整)删除所有行)
Truncate:用于删除表内的数据(注:仅删除表内的数据,不删除表本身,相当于Delete语句不写Where子句一样)

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马