含有自增序列的表中使用truncate与delete的不同结果
2015-12-21 16:58
351 查看
一个含有自增序列的表,使用delete跟truncate之后会有什么不同结果呢?
大概说一下,使用truncate,表中的记录全部被清除,如果向表中插入数据,那么数据的排序是从1开始的。
如果使用的是delete,那么记录的排序值不会被清除,它是一次累加上去的。下面给出一个小例子,可以参考一下
输出结果如下:
输出结果如下:
大概说一下,使用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
输出结果如下:
相关文章推荐
- Acjoy群赛02-C - HopscotcH
- java 数据库连接池
- Linux安装gcc软件的依赖关系
- 策划反推文档教程:格式篇
- java工具类二
- 【小方法】 判断是否经过事件
- 每天一个Linux之pwd命令
- C键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。
- Hadoop 序列化前的准备:Java 序列化
- ListView的onItemClick方法传递参数
- 4-10 阶乘计算升级版
- 编写字符小游戏——贪吃蛇程序(c语言)
- Linux系统文件系统的结构层次详解
- Unity3D (塔防游戏)射击 之 抛物线运动(模拟炮弹)
- 【ANT】构建文件build.xml
- Android NDK开发Crash错误定位
- 跨站脚本攻击之tld解决方案!
- sql中统计一列中重复的数据个数
- 蓝桥杯 拦截导弹 动态规划(最长下降子序列+最长上升子序列)
- qduoj61 统计人数