sql语句中----删除表数据的"三兄弟"

说到删除表数据的关键字,大家记得最多的可能就是delete了

然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了

现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的


老大------drop

出没场合:drop table  tb --tb表示数据表的名字,下同

绝招:删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表,

例如:一个班就是一个表,学生就是表中的数据,学生的职务就是定义

drop table class,就是把整个班移除.学生和职务都消失

比如下面TestSchool数据库中有两张表[Classes]表和[Teacher]表

当执行下面代码之后

Classes表就被清楚,一干二净! 删除得非常暴力,作为老大实至名归


老二-----truncate

出没场合:truncate table tb

绝招:删除内容、释放空间但不删除定义。与drop不同的是,他只是清空表数据而已,他比较温柔.

同样也是一个班,他只去除所有的学生.班还在,职务还在,如果有新增的学生可以进去,也可以分配上职务

删除内容很容易理解,不删除定义也很容易理解,就是保留表的数据结构

上图就表现了:删除内容

执行语句之后,发现数据表的结构还在,也就是不删除定义

至于释放空间,看下下面两幅图.你们就会明白的

右图:Id列标识列,因之前delete过行数据,所以会出现标识列不连续(体现了delete删除是不释放空间的)

经过truncate table Teacher 之后 再新增三条数据

右图:同样Id是标识列,发现插入数据的时候,标识列连续了(体现了truncate删除是释放空间)

注意:truncate 不能删除行数据,要删就要把表清空


老三-----delete

出没场合:delete table tb   --虽然也是删除整个表的数据,但是过程是痛苦的(系统一行一行地删,效率较truncate低)

delete  tb where 条件

绝招:删除内容不删除定义,不释放空间。三兄弟之中最容易欺负的一个

然后关于delete的就不详细说明了,大家都懂的


关于truncate的小小总结:

truncate table 在功能上与不带 WHERE 子句的 delete语句相同:二者均删除表中的全部行。

但 truncate 比 delete速度快,且使用的系统和事务日志资源少。

delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行roll back

1、truncate 在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而 truncate 则不会被撤销。 
2、truncate 是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对 truncate 使用ROLLBACK命令。 
3、truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比Delete操作后的表要快得多。 
4、truncate 不能触发任何Delete触发器。 
5、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。 
6、不能清空父表

时间: 2024-10-10 23:56:29

sql语句中----删除表数据的"三兄弟"的相关文章

SQL语句中----删除表数据drop、truncate和delete的用法

一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test 2.truncate table 表名称                     eg: truncate  table dbo.Sys_Test   3.delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where test='test' 二.drop,tru

sql语句中---删除表结构drop,truncate和delete的异同点

参考别人总结,此内容仅供自己学习 一.sql中的语法 1.drop table 表名称                                      eg:drop table dbo.Sys_Test 2.truncate table 表名称                                eg:truncate table dbo.Sys_Test 3.delete from 表名称 where  列名称=值       eg:delete from dbo.Sys

mysql语句中----删除表数据drop、truncate和delete的用法

程度从强到弱 1.drop  table tb drop将表格直接删除,没有办法找回 2.truncate (table) tb 删除表中的所有数据,不能与where一起使用 3.delete from tb (where) 删除表中的数据(可制定某一行) 区别:truncate和delete的区别 1.事务:truncate是不可以rollback的,但是delete是可以rollback的: 原因:truncate删除整表数据(ddl语句,隐式提交),delete是一行一行的删除,可以rol

SQL语句中的表操作

数据库中主要的部分是不同的表,在SQL语句中提供了一些对于表的操作.我们讨论的操作都是在SQL SERVICE中的 一.新建表: 新建表的语法格式为:CREATE TABLE 表名(列名 数据类型[完整性约束条件], 列名 数据类型 [完整性约束条件],...);其中完整性约束条件可以添加也可以不加,如果不加也可以在表定义完成后另外在添加,比如我们现在需要创建一个学生表,可以使用这样的代码来创建: create table student(Sno char(10) PRIMARY KEY, Sn

sql语句中3表删除和3表查询

好久没来咱们博客园了,主要近期在忙一些七七八八的杂事,包括打羽毛球比赛的准备和自己在学jqgrid的迷茫.先不扯这些没用的了,希望大家能记得小弟,小弟在此谢过大家了. 回归正题:(以下的sql是本人在用yii框架开发项目时写的,希望对大家有些帮助) 首先是多表查询,为了简化我先贴出自己的代码,在贴出解释代码. select a.*, b.*, c.* from rlzy_payfeeinf a inner join rlzy_personinfo b on a.bid=b.bid join rl

sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)

我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与delete区别. 我们先看一下truncate table的说明:删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同:但是,TRUNCATE TABLE速度更快,使用的系统资源和事务日志资源更少. truncate table的语

sql server:删除表数据,标识列Id从1开始

在sql server数据库上创建有自增列的数据表,每次删除表的数据后,自增主键都无法自动从1开始计数.用下面三个单词就可以轻松搞定: TRUNCATE  TABLE  TbName   --TbName是表名

SQL Server中删除表中重复数据

方法一:利用游标,但要注意主字段或标识列 declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set row

Sql语句——删除表数据drop、truncate和delete的用法

一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表名称                     eg: truncate  table dbo.Sys_Test                     3.delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where te