自增字段
AUTO_INCREMENT 让数据库自动生成递增的主键值,每次插入新行时自动设为当前最大值 + 1。
自增字段是 MySQL 的特色功能,通常和主键搭配使用。每次 INSERT 新行时,自增列的值自动设为当前最大值 + 1。它只能用于整数类型(INT、BIGINT、TINYINT 等),每张表最多一个自增列,而且该列必须被索引(通常是主键)。
自增的起始值默认为 1,可以通过 AUTO_INCREMENT = N 修改。删除最大 ID 的行后,该 ID 不会被重用(除非你手动重置自增计数器),这保证了 ID 的单调递增,也避免了"新数据用旧 ID"可能带来的混淆。
主键生成是个麻烦事。如果让应用程序生成(比如用 UUID),不仅占用更多存储空间,还会导致索引页分裂,降低写入性能。自增整数主键紧凑、有序,是 InnoDB 引擎的最优选择——它让数据按主键顺序物理存储,插入新数据时总是追加到末尾,不会在中间"插队"导致数据页分裂。
标准写法:
CREATE TABLE 表名 (
列名 INT AUTO_INCREMENT PRIMARY KEY
);
-- 修改自增起始值
ALTER TABLE 表名 AUTO_INCREMENT = 100;
以飞翔科技为例。各业务表统一使用自增主键:
-- 员工表:emp_id 自增,从 10001 开始
CREATE TABLE employees (
emp_id INT AUTO_INCREMENT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
dept_code TINYINT DEFAULT 1,
basic_salary DECIMAL(10,2) NOT NULL
) AUTO_INCREMENT = 10001;
-- 商品表:product_id 自增,从 10086 开始
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0
) AUTO_INCREMENT = 10086;
-- 插入商品,不指定 product_id,数据库自动生成
INSERT INTO products (product_name, price, stock)
VALUES ('A级商品', 188.88, 1000);
-- product_id 自动设为 10086
自增主键让开发者从"如何分配唯一 ID"的烦恼中解放出来,也避免了并发插入时的 ID 冲突。飞翔科技的订单表、日志表、用户表都可以沿用这个模式,整个系统的 ID 体系清晰、高效、无冲突。