标识列(自增长列)
一、什么是标识列
标识列(Identity Column),又称 自增长列(AUTO_INCREMENT),是一种由数据库系统自动维护数值的列。
其核心特征是:
在插入数据时,无需手动指定该列的值,数据库会自动生成一个递增的数值。
自增长列通常用于表示 记录的唯一标识,例如主键 ID。
二、标识列的特点
-
必须与键配合使用
- 通常是 主键(PRIMARY KEY)
- 也可以是 唯一键(UNIQUE)
- 不推荐与外键直接搭配使用
-
一个表中只能有一个标识列
-
标识列的类型必须是数值型
- 常见:
INT - 也可以是其他整型(如
BIGINT) - 不推荐使用浮点型作为自增长列
- 常见:
三、创建表时设置标识列
1. 创建表示例
DROP TABLE IF EXISTS tab_identify;
CREATE TABLE tab_identify (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
说明:
AUTO_INCREMENT:声明该列为自增长列PRIMARY KEY:保证唯一性并作为表的主键
2. 插入数据示例
INSERT INTO tab_identify VALUES (NULL, 'Leslie');
INSERT INTO tab_identify VALUES (NULL, 'Jesie');
SELECT * FROM tab_identify;
说明:
- 插入时为
id显式写NULL或直接省略该列 - MySQL 会自动生成连续递增的值
3. 清空表数据(注意影响)
TRUNCATE TABLE tab_identify;
使用
TRUNCATE清空表后,自增长计数器会 重置,下一条记录通常从 1 开始。
四、自增长步长与起始值
1. 查看自增长相关系统变量
SHOW VARIABLES LIKE '%auto_increment%';
常见变量:
auto_increment_increment:自增长步长auto_increment_offset:起始偏移量
2. 设置自增长步长
SET auto_increment_increment = 3;
设置后,自增长值将按指定步长递增(如:1 → 4 → 7)
⚠️ 该设置为 会话级或全局级配置,通常用于主从复制场景,不建议在普通业务中频繁修改。
五、修改表结构添加标识列
如果表已存在,也可以通过修改字段的方式设置自增长列:
ALTER TABLE tab_identify
MODIFY COLUMN id INT UNIQUE AUTO_INCREMENT;
说明:
-
本质上是 修改字段定义
-
被修改的列必须满足:
- 唯一性约束
- 数值类型
- 表中不能已有其他自增长列
六、使用标识列的注意事项
-
不要手动频繁插入自增长列的值,容易破坏序列
-
自增长列不保证“连续无缺口”
- 删除数据
- 回滚事务
- 并发插入 都可能导致数值跳跃
-
标识列适合用于:
- 主键
- 内部唯一标识 不适合作为有业务含义的字段
七、小结
- 标识列是 MySQL 中常用的自动编号机制
- 使用关键字:
AUTO_INCREMENT - 一个表只能有一个自增长列
- 常用于主键 ID
- 与
DELETE、TRUNCATE、事务等操作存在行为差异
合理使用自增长列,有助于简化数据插入逻辑并保证记录唯一性。