MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 2^32-1。既然自增 id 有上限,就有可能被用完。但是,自增 id 用完了会怎么样呢?
一、表定义自增值 id
说到自增 id,你第一个想到的应该就是表结构定义里的自增字段和你介绍过的自增主键 id。表定义的自增值达到上限后的逻辑是:
再申请下一个 id 时,得到的值保持不变。
我们可以通过下面这个语句序列验证一下:
create table t(id int unsigned auto_increment primary key) auto_increment=4294967295;
insert into t values(null);
// 成功插入一行 4294967295
show create table t;
/* CREATE
MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 2^32-1。既然自增 id 有上限,就有可能被用完。但是,自增 id 用完了会怎么样呢?
--
id
:数据
类型
为 int (整数);
-- name 姓名:数据
类型
为 varchar(字符串)长度为 20,
-- age 年龄:数据
类型
为 tinyint unsigned(无符号小整数);
CREATE TABLE c(
id
...
全局唯一
id
特点:
全局唯一性:不能出现重复的
ID
号,既然是唯一标识,这是最基本的要求;
趋势递增:在
MySQL
InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能;
单调递增:保证下一个
ID
一定大于上一个
ID
,例如事务版本号、IM增量消息、排序等特殊需求;
信息安全:如果
ID
是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所
数据库
的操作
安装前准备:点我下载压缩版安装包下载后得到zip压缩包.解压到自己想要安装到的目录,本人解压到的是D:\develop\
mysql
\
mysql
-5.7.34添加环境变量:我的电脑->属性->高级->环境变量选择PATH,在其后面添加: 你的
mysql
安装文件下面的bin文件夹(如:D:\develop\
mysql
\
mysql
-5.7.34\bin)编辑
mysql
-5.7.34下的my.ini (自己新建)文件 ,注意替换路径位置
必须启动管理员模式