数据表自增主键(int)溢出解决方案整理
2018-01-11 16:37
106 查看
sql自增主键溢出解决方案:
简单粗暴法
重置自增字段法
偷换ID法
笨方法
注意注意
第一种 清空所有数据
第二种 删除表 重建 (用TRUNCATE就可以了,用drop就傻了)
第三种 直接把int 改成bigint,本来就bigint的看其他吧
例子:
第一步:执行前的数据预览
第二步:执行本条语句
DBCC CHECKIDENT(testaaa,reseed,0)
第三步:插入一条数据
测试:我们利用sql进行自增列显性插入(就是手动指定id值,非系统自动分配)
结果表明当前列值已进行了更新,不能继续溢出插入数值
注意注意:此种方法的弊端,数据id触碰问题!!!!!
二 除非特别自信,请务必做数据保存。
简单粗暴法
重置自增字段法
偷换ID法
笨方法
注意注意
简单粗暴法
适用于数据不重要的情况下,可以进行情况,建议先备份数据第一种 清空所有数据
--直接释放所有数据 --不能用delete:TRUNCATE瞬间解决,DELETE会执行到你睡着,DELETE不会重置自增标识,达不到效果 TRUNCATE TABLE testaaa
第二种 删除表 重建 (用TRUNCATE就可以了,用drop就傻了)
第三种 直接把int 改成bigint,本来就bigint的看其他吧
ALTER TABLE dbo.testaaa ALTER COLUMN id BIGINT
重置自增字段法
适用于数据id顺序不重要的情况,保留了原数据,释放了空格数据--重置表的自增字段,保留数据 DBCC CHECKIDENT(testaaa,reseed,0) --后面的这个0代表重置标识值
例子:
第一步:执行前的数据预览
第二步:执行本条语句
DBCC CHECKIDENT(testaaa,reseed,0)
第三步:插入一条数据
INSERT dbo.testaaa( name ) VALUES ( N'ddddd')
测试:我们利用sql进行自增列显性插入(就是手动指定id值,非系统自动分配)
-- 设置允许显式插入自增列 SET IDENTITY_INSERT dbo.testaaa ON INSERT dbo.testaaa ( id,name ) VALUES ( 2147483647,N'aaa') -- 当然插入完毕记得要设置不允许显式插入自增列 SET IDENTITY_INSERT dbo.testaaa Off
结果表明当前列值已进行了更新,不能继续溢出插入数值
注意注意:此种方法的弊端,数据id触碰问题!!!!!
偷换ID法
相当于删除原有id,重置所有id数据,适用于id不重要--删除原有主键 DECLARE @Pk varChar(100); Select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('testaaa') and xtype='PK'; if @Pk is not null begin exec('Alter table testaaa Drop '+ @Pk) end --删除id ALTER TABLE dbo.testaaa DROP COLUMN id --新增自增id ALTER TABLE dbo.testaaa ADD ID INT IDENTITY(1,1) NOT NULL --创建主键 ALTER TABLE dbo.testaaa ADD CONSTRAINT [PK_testaaa] PRIMARY KEY(id ASC)
笨方法
将本表数据备份到另外一张表内,再清空本表数据,然后再插回备份表的数据--备份数据 SELECT * INTO testaaa_bak FROM dbo.testaaa --清空当前表数据 TRUNCATE TABLE testaaa --返回当前数据 INSERT dbo.testaaa ( name ) SELECT name FROM testaaa_bak --删除备份表 DROP TABLE dbo.testaaa_bak
注意!!!!注意
一 是你的数据都突破int了,变更列或者表都会特别耗时,不建议白天业务忙的时候执行。建议可以去除有一些时间过久的数据后再来操作。二 除非特别自信,请务必做数据保存。
相关文章推荐
- 将 expression 转换为数据类型 int 时发生算术溢出
- 解决"将expression转化为数据类型int时发生算术溢出错误"
- C++ bool,char,short,int,long,float,double数据类型大小以及数据溢出值求解
- 将 expression 转换为数据类型 int 时发生算术溢出
- 将 expression 转换为数据类型 int 时出现算术溢出错误。
- 转载:Redis与Mysql数据同步解决方案整理
- MySQL和Redis 数据同步解决方案整理
- Redis系列~Mysql数据同步解决方案整理(二十一)
- GUID和INT两种数据类型做主键的比较
- Java导入excel大量数据出现内存溢出解决方案
- MySQL和Redis 数据同步解决方案整理
- 数据库间数据迁移常见问题解决方案整理
- GUID和INT两种数据类型做主键的比较
- Greendao 3.X 数据库升级,新增int、long数据类型字段NOT NULL 解决方案
- 关于sum(int)报错:将expression转化为数据类型int时发生算术溢出错误
- GUID和INT两种数据类型做主键的比较
- 大数据导出Excel导致内存溢出的解决方案
- GUID和INT两种数据类型做主键的比较
- (SQL)将 expression 转换为数据类型 int 时发生算术溢出错误 2种快速处理方法
- SQL 语句之insert语句插入数据:若表中有重复的主键或数据继续插入解决方案