drop、truncate 和 delete 的用法

delete

语法:
delete table table_name(删除整个表的数据)

delete table table_name where 条件 (删除满足条件的数据)

例:

  • 新建表格
    create table class (Id int,Name nvarchar(20),Gender nvarchar(2));

  • 插入数据
    insert into class values (1,‘小明’,‘男’);
    insert into class values (2,‘小强’,‘男’);
    insert into class values (3,‘小刚’,‘男’);
    insert into class values (4,‘小兰’,‘女’);
    insert into class values (5,‘小美’,‘女’);
    insert into class values (6,‘小樱’,‘女’);

  • 查询
    select * from class;
    结果如下
    在这里插入图片描述

  • 删除部分数据
    delete from class where Name = ‘小明’;

  • 查询
    select * from class;
    结果如下
    在这里插入图片描述

  • 删除所有数据
    delete from class;

  • 查询
    select * from class;
    结果如下
    在这里插入图片描述

delete 效果:删除内容,不删除定义(即依然保留表的数据结构),不释放空间。

truncate

语法:
truncate table table_name(删除class表所有数据)

例:
truncate table class;
查询
select * from class;
结果如下
在这里插入图片描述
truncate效果:删除内容,不删除定义,释放空间。

若把表比喻成一个班级,学生就是表中的数据,学生的职务就是定义。
truncate 只去除所有的学生.班级还在,职务也在,如果有新增的学生可以进去,也可以分配上职务。

Drop

语法:
drop table table_name(彻底删除表格)

例:
TEST01数据库中新建的[class]表如下图:
在这里插入图片描述
当执行drop table class 后,class表就被清除的一干二净了。
在这里插入图片描述
使用语句select * from class查询时,会提示如下:
在这里插入图片描述
drop 效果:删除内容和定义(即把整张表彻底删除),释放空间。

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

小结:

  • truncate table 在功能上与不带 where 子句的 delete语句相同:二者均删除表中的全部行。
    但 truncate 比 delete速度快,且使用的系统和事务日志资源少。
  • delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,不记录单个行删除操作。
  • truncate 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 delete。如果要删除表定义及其数据,请使用 drop 语句。
  • 对于由 FOREIGN KEY 约束引用的表,不能使用 truncate,而应使用不带 whereE 子句的 delete 语句。由于 truncate 不记录在日志中,所以它不能激活触发器。
  • truncate 不能用于参与了索引视图的表。
  • truncate 是一个DDL语言,和其他所有的DDL语言一样,将被隐式提交,不能对 truncate 使用rollback命令。但可对delete使用 rollback命令。
  • truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比delete操作后的表要快得多。
  • 一般来说,执行速度为: drop> truncate > delete 。

猜你喜欢

转载自blog.csdn.net/Ruishine/article/details/113993232
今日推荐