数据表自增主键(int)溢出解决方案整理

news/2024/7/17 4:19:00 标签: sql, int溢出, 表数据

sql自增主键溢出解决方案:

    • 简单粗暴法
    • 重置自增字段法
    • 偷换ID法
    • 笨方法
    • 注意注意


简单粗暴法

适用于数据不重要的情况下,可以进行情况,建议先备份数据
第一种 清空所有数据

sql hljs ">--直接释放所有数据  
--不能用delete:TRUNCATE瞬间解决,DELETE会执行到你睡着,DELETE不会重置自增标识,达不到效果
TRUNCATE TABLE testaaa 

第二种 删除表 重建 (用TRUNCATE就可以了,用drop就傻了)

第三种 直接把int 改成bigint,本来就bigint的看其他吧

sql">
ALTER TABLE dbo.testaaa
ALTER COLUMN id BIGINT

重置自增字段法

适用于数据id顺序不重要的情况,保留了原数据,释放了空格数据

sql hljs ">--重置表的自增字段,保留数据
DBCC CHECKIDENT(testaaa,reseed,0)  --后面的这个0代表重置标识值

例子:
第一步:执行前的数据预览
这里写图片描述

第二步:执行本条语句
DBCC CHECKIDENT(testaaa,reseed,0)
这里写图片描述
第三步:插入一条数据

sql hljs ">INSERT dbo.testaaa( name )
VALUES  ( N'ddddd')

这里写图片描述

测试:我们利用sql进行自增列显性插入(就是手动指定id值,非系统自动分配)

sql hljs ">-- 设置允许显式插入自增列
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不重要

sql">--删除原有主键
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)

这里写图片描述

笨方法

将本表数据备份到另外一张表内,再清空本表数据,然后再插回备份表的数据

sql">--备份数据
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了,变更列或者表都会特别耗时,不建议白天业务忙的时候执行。建议可以去除有一些时间过久的数据后再来操作。
二 除非特别自信,请务必做数据保存。


http://www.niftyadmin.cn/n/791150.html

相关文章

概率论02 概率公理

概率论早期用于研究赌博中的概率事件。赌徒对 于结果的判断基于直觉,但高明的赌徒尝试从理性的角度来理解。然而,赌博中的一些结果似乎有矛盾。比如掷一个骰子,每个数字出现的概率相等,都是1/6。 然而,如果有两个骰子&…

散列使得查询速度提升,HashMap如此快的原因

本文来自《Thinking in Java 3th》 散列的价值在于速度:散列使得查询得以快速进行。由于速度的瓶颈是对“键”的查询,因此解决的方案之一就是保持“键”的排序状态,然后使用Collections.binarySearch进行查询。散列则更进一步,他将…

SQL Server语句查找约束,删除含默认值字段

包含有默认值的字段删除需要先删除约束,则需要查找约束名 删除约束: ALTER TABLE dbo.表名DROP CONSTRAINT DF__XXXXXI__Curre__19EB91BA查找表相关约束: select * from sysobjects where parent_obj in(select id from sysobjects where na…

联 合(union) 结构

联 合(union) 1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不…

sqlserver

虚拟内存:内存的1.5倍数windows审计可以设置下,打开失败的审核,成功的审核不用打开本地计算机策略:计算机配置-windows设置-本地策略-审计 Windos BPA 与SQLServerBPA:最佳实践的工具可以去微软网站上下载内存&#xf…

Redis学习手册(管线)

一、请求应答协议和RTT: Redis是一种典型的基于C/S模型的TCP服务器。在客户端与服务器的通讯过程中,通常都是客户端率先发起请求,服务器在接收到请求后执行相应的任务,最后再将获取的数据或处理结果以应答的方式发送给客户端。…

支持不同屏幕尺寸

https://developer.android.google.cn/training/multiscreen/screensizes.html#TaskUseSWQuali 本课程将向您介绍如何通过下列方法支持不同的屏幕尺寸: 确保您的布局能够根据屏幕适当地调整大小根据屏幕配置提供合适的 UI 布局确保对正确的屏幕应用正确的布局提供…

魔法值的简单了解

说明:所谓魔法数值,是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。魔法数值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底这些数值是不是带有同样的含义呢&#xf…