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

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

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

------------================================
--Author:oliver QIN
--DATE:2015-12-21
--DESC:INDETITY(1,1)使用delete跟truncate后排序是怎么变化的
---==========================================建表
if exists(select * from sysobjects where ID=OBJECT_ID(N'TB') AND XTYPE='u')
drop table TB
CREATE TABLE TB(ID INT IDENTITY(1,1),NAME NVARCHAR(100),dtDate datetime) INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) --===============建立存储过程(delete),先判断是否存在数据,如果存在就删除,然后插入数据,看序列的变化
go
IF((SELECT COUNT(*) FROM SYSOBJECTS WHERE ID=OBJECT_ID(N'P_sample_DELETE') AND XTYPE='P')>0 )
DROP PROC P_sample_DELETE
GO
CREATE PROC P_sample_DELETE
as
begin
if((select count(*) from TB WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10))>0)
begin
delete from TB --WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
end
INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
end GO
--===============建立存储过程(truncate),先判断是否存在数据,如果存在就删除,然后插入数据,看序列的变化 IF((SELECT COUNT(*) FROM SYSOBJECTS WHERE ID=OBJECT_ID(N'P_sample_TRUNCATE') AND XTYPE='P')>0 )
DROP PROC P_sample_TRUNCATE
GO
CREATE PROC P_sample_TRUNCATE
as
begin
if((select count(*) from TB WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10))>0)
begin
TRUNCATE TABLE TB
end
INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
end
--------------调用三次TRUNCATE
EXEC P_sample_TRUNCATE
EXEC P_sample_TRUNCATE
EXEC P_sample_TRUNCATE

输出结果如下:

-------------调用三次DELETE
EXEC P_sample_DELETE
EXEC P_sample_DELETE
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. 条件控制(if ) ( case)

    一:IF应用格式 (1) (2) (3) IF 条件 THEN IF 条件 THEN IF 条件1 THEN --代码块        --代码块    --代码块1 commit; commit; ...

  2. POJ 2253 Frogger (最短路)

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28333   Accepted: 9208 Descript ...

  3. IO输入输出 3

    编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. package com.hanqi.test; impo ...

  4. 学习Slim Framework for PHP v3 (六)--route怎么被匹配的?

    先标记觉得以后会用到的内容: // add route to the request's attributes in case a middleware or handler needs access ...

  5. 模仿Word中组织结构图的特点生成流程图

    //基本原理: // 1. 从下往上计算位置 // 2. 模仿Word中组织结构图的特点 //调用代码: Tree<string> tree = new Tree<string> ...

  6. table-layout:fixed 属性的解说

    table-layout:fixed 属性的解说如果想要一个table固定大小,里面的文字强制换行(尤其是在一长串英文文本,并且中间无空格分隔的情况下),以达到使过长的文字不撑破表格的目的,一般是使用 ...

  7. JAVA之执行cmd命令

    感言在前:时隔好久没有更新博客园了,忙东忙西也没忙出个什么之所以然来.回首过去一两个月,只能用“疲倦”两个字来形容,而且是身心疲惫.每天11.12个小时的工作我都没觉得烦,但是总是想克服却又很难克服的 ...

  8. ASP.Net 获取当前时间,包含各种时间格式

    在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间 ...

  9. IIS7下swfupload上传大文件出现404错误

    要求上传附件大小限制在2G,原本以为可以轻松搞定.在编译模式下可以上传大文件,可是在IIS7下(自己架的服务器),一上传大的文件就会出现 Http 404错误,偶尔有的文件还有IO. error错误. ...

  10. 初识 Jenkins

    Jenkins: Jenkins 是一款获奖的跨平台持续集成和持续交付软件,可以大大提高生产力.Jenkins 用以构建和测试软件项目,帮助开发者更容易的实现项目变更的持续集成,帮助用户更容易的获取最 ...