一个含有自增序列的表,使用delete跟truncate之后会有什么不同结果呢?

大概说一下,使用truncate,表中的记录全部被清除,如果向表中插入数据,那么数据的排序是从1开始的。

如果使用的是delete,那么记录的排序值不会被清除,它是一次累加上去的。下面给出一个小例子,可以参考一下

  1. ------------================================
  2. --Authoroliver QIN
  3. --DATE2015-12-21
  4. --DESCINDETITY11)使用deletetruncate后排序是怎么变化的
  5. ---==========================================建表
  6. if exists(select * from sysobjects where ID=OBJECT_ID(N'TB') AND XTYPE='u')
  7. drop table TB
  8. CREATE TABLE TB(ID INT IDENTITY(1,1),NAME NVARCHAR(100),dtDate datetime)
  9.  
  10. INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
  11. SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
  12.  
  13. --===============建立存储过程(delete),先判断是否存在数据,如果存在就删除,然后插入数据,看序列的变化
  14. go
  15. IF((SELECT COUNT(*) FROM SYSOBJECTS WHERE ID=OBJECT_ID(N'P_sample_DELETE') AND XTYPE='P')>0 )
  16. DROP PROC P_sample_DELETE
  17. GO
  18. CREATE PROC P_sample_DELETE
  19. as
  20. begin
  21. if((select count(*) from TB WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10))>0)
  22. begin
  23. delete from TB --WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
  24. end
  25. INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
  26. SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
  27. end
  28.  
  29. GO
  30. --===============建立存储过程(truncate),先判断是否存在数据,如果存在就删除,然后插入数据,看序列的变化
  31.  
  32. IF((SELECT COUNT(*) FROM SYSOBJECTS WHERE ID=OBJECT_ID(N'P_sample_TRUNCATE') AND XTYPE='P')>0 )
  33. DROP PROC P_sample_TRUNCATE
  34. GO
  35. CREATE PROC P_sample_TRUNCATE
  36. as
  37. begin
  38. if((select count(*) from TB WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10))>0)
  39. begin
  40. TRUNCATE TABLE TB
  41. end
  42. INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
  43. SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
  44. end
  1. --------------调用三次TRUNCATE
  2. EXEC P_sample_TRUNCATE
  3. EXEC P_sample_TRUNCATE
  4. EXEC P_sample_TRUNCATE

输出结果如下:

  1. -------------调用三次DELETE
  2. EXEC P_sample_DELETE
  3. EXEC P_sample_DELETE
  4. EXEC P_sample_DELETE

输出结果如下:

含有自增序列的表中使用truncate与delete的不同结果的更多相关文章

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

    我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与d ...

  2. Oracle中的Truncate和Delete语句

    Oracle中的Truncate和Delete语句   首先讲一下,truncate命令:   语法:TRUNCATE  TABLE  table; 表格里的数据被清空,存储空间被释放. 运行后会自动 ...

  3. Sql语句中的truncate,delete,drop的区别

    相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 不同点: 1. truncate 和 delete 只删除数据不删除表的结构(定义) drop 语句 ...

  4. oracle 中的truncate 和delete

    一.查询表大小,块多少语句 Select SEGMENT_Name,BYTES,BLOCKS,Extents From dba_segments Where segment_name In('BAI_ ...

  5. MySQL中drop,truncate 和delete的区别

    注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: truncate和 del ...

  6. MySQL进阶10--DML数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别

    /* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2 ...

  7. 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法

    一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表 ...

  8. mysql 清空表 Truncate及delete区别

    1.delete from 表名[where]; 2.truncate table 表名; 3.delete将mysql表中所有记录一条一条删除到删完 4.truncate保留mysql表的结构,重新 ...

  9. MySql中drop、truncate、delete的区别

    1.drop:能对table和view 用法:  drop table [is exists] 表1,表2,表3....: ①drop是DDL中删除表的操作,会删除表结构和所有数据,并释放空间. ②并 ...

随机推荐

  1. java jdbc连接mysql

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  2. 0. SQL Server监控清单

    数据库服务器的监控可大致分为两类: (1) 状态监控:数据库服务器有没有在健康地运行? (2) 性能监控:健康运行的同时,有没有性能问题?可不可以更快些? 一. 服务器 1. 状态监控 (1) 服务器 ...

  3. PHP output_buffering 你了解多少

    一.我们要说一下php中的缓存大概有哪些! 在PHP中,我们可以粗略的将缓存分为客户端缓存(Browser缓存),服务器端缓存(Server缓存).由于PHP是基于B/S架构的,所以,我们可以理解为浏 ...

  4. CentOS 7 使用外部邮箱 发送邮件和附件—mail,mailx

    1.查看软件包是否安装 [root@localhost ~]# rpm -qa|grep mail mailx-12.5-12.el7_0.x86_64 javamail-1.4.6-8.el7.no ...

  5. first集合及follow集合

    前面那片文章生成的语法分析表并不是最优的,因为有些项在遇到错误输入的时候,并不是采取报错,而是执行规约,直到不能再规约的时候才报错.这是不科学的,我们需要在得到错误输入的时候立马报错,为了实现这个功能 ...

  6. codeforces 675B B. Restoring Painting(暴力枚举)

    题目链接: B. Restoring Painting time limit per test 1 second memory limit per test 256 megabytes input s ...

  7. 转:怎么使用github(通俗易懂版)

    转:  https://www.zhihu.com/question/20070065 作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/ans ...

  8. iOS-单例模式-使用技巧

    SingleModel-单例模式 单例可以保证在程序运行过程,一个类只有一个实例(一个对象) 一般将单例设置成宏,这样在使用的时候可以很方便. 我们可以按照下面的步骤实现单例 1.自定义一个.h文件, ...

  9. Struts2+Hibernate4+Spring4整合

    jar包 配置文件 web.xml文件 <!-- needed for ContextLoaderListener --> <context-param> <param- ...

  10. sicily 1027 MJ, Nowhere to Hide 字符串匹配与排序

    1027. MJ, Nowhere to Hide Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description On BBS, th ...