LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SQL的自增长 ID 用完了,怎么办?到底该用 int 还是 bigint 类型?

admin
2024年6月17日 10:36 本文热度 1026
SQLServer / MySQL 自增长 ID 一般用的数据类型是 INT 或 BIGINT,正常情况下这两种类型可以满足大多数应用的需求。

当然也有不正常的情况,当达到其最大值时,尝试插入新的记录会导致错误,错误信息类似于:
ERROR 167 (22003): Out of range value for column 'id' at row 1
下面我们就来看看  INT 或 BIGINT 到底能插入多少的数据。


1、INT 
INT 类型占用 4 个字节,范围:-2,147,483,648 到 2,147,483,647(如果是无符号类型,则范围是 0 到 4,294,967,295
也就是说 INT 类型存储量将近可以达到 43 亿,看着数量,感觉可以存储很多条记录了,我们就来计算下:
一年 365 天一天 24 小时一小时 60 分钟一分钟 60 秒如果每秒钟存储 100 条记录看看能用多久:
# INT 的最大值max_int_value =  4294967295
# 每秒记录数records_per_second = 100
# 每年的秒数records_per_year = 365 * 24 * 60 * 60result = max_int_value/(records_per_second * records_per_year)
print(result)# 结果:1.3619251950152207
结果就为 1.3619251950152207也就是能存储 1 年多的时间,看来确实不太够,使用 INT 类型,如果数据量过多,自增 ID 很容超过最大数值。


2、BIGINT
BIGINT 占用 8 个字节,范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(如果是无符号类型,则范围是 0 到 18,446,744,073,709,551,615
假如公司是我家,我准备在公司呆个 100 年,我们来计算下 BIGINT 使用 100 年支持每秒插入多少数据。

BIGINT 类型的最大值:

无符号 BIGINT 类型的最大值为18,446,744,073,709,551,615。

计算 100 年的秒数:
100×365天/年×24小时/天×60分钟/小时×60秒/分钟 = 3,153,600,000
# BIGINT 的最大值max_bigint = 18446744073709551615
# 100年的秒数seconds_in_100_years = 365*24*60*60*100
# 计算结果result = max_bigint / seconds_in_100_years
print(result)# 结果:5849424173.55072
结果为 5849424173.55072 相当于每秒钟插入 58 亿的数据,这样的数据双十一都不知有没达到,我用 AI 查找了下淘宝双十一历史的最大并发生:
这样看,我如果使用 ,在公司干个 100 年完全没问题,即便公司能活 100 年,老板也活不过 120+(假设老板 20 岁出来继承家业),也就是即便我把老板送走,都达不到最大的值。
所以我们只要把自增 ID 设置为 BIGINT 类型,你根本就不用担心自增 ID 会用完,而是要担心公司能不能活的比 BIGINT 更长。
总结:INT 类型在大多数情况下足够使用,当需要更大的数值范围时,可以考虑使用 BIGINT 类型。
如果你的自增 ID 是 INT  类型,要修改 INT 为 BIGINT 可以使用 ALTER 命令:
-- 创建表CREATE TABLE orders (    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,    order_data VARCHAR(255));-- 查看表结构DESCRIBE orders;-- 修改自增列的数据类型ALTER TABLE orders MODIFY id BIGINT UNSIGNED AUTO_INCREMENT;-- 再次查看表结构,确认修改DESCRIBE orders;

注意事项

  1. 备份数据:在进行表结构修改之前,最好备份数据,以防止操作过程中出现意外情况。
  2. 锁表:在修改表结构时,表可能会被锁定,导致短暂的写操作中断。尽量在业务低峰期进行操作。
  3. 外键约束:如果有外键约束涉及到要修改的列,需要先删除相关外键约束,修改列类型后再重新添加外键约束。

该文章在 2024/6/17 10:40:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved