如何让SQL的ID从0001(4位数字)开始自动递增?
实现从0001开始的4位自动递增ID
完全可以实现,通常有两种思路:整数自增+查询时格式化(推荐,性能更优),或者存储为带前导零的字符串(适合特殊存储需求),以下是主流数据库的具体实现方式:
方法1:整数自增+查询格式化(推荐)
数据库底层用整数存储自增ID,仅在查询展示时格式化为4位带前导零的字符串,这种方式既保留了整数存储的高效性,又能满足显示需求。
MySQL
- 创建表并设置自增起始值为1:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL ) AUTO_INCREMENT = 1;
- 查询时用
LPAD函数补零:
SELECT LPAD(id, 4, '0') AS id, name FROM users;
插入数据后执行上述查询,就能得到0001、0002格式的ID。
SQL Server
- 创建表,设置自增列起始值为1:
CREATE TABLE users ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(50) NOT NULL );
- 查询时格式化输出:
-- 方式1:使用FORMAT函数 SELECT FORMAT(id, '0000') AS id, name FROM users; -- 方式2:使用RIGHT拼接补零 SELECT RIGHT('0000' + CAST(id AS VARCHAR(4)), 4) AS id, name FROM users;
PostgreSQL
- 创建自增序列和表:
CREATE SEQUENCE users_id_seq START WITH 1 INCREMENT BY 1; CREATE TABLE users ( id INT PRIMARY KEY DEFAULT nextval('users_id_seq'), name VARCHAR(50) NOT NULL );
- 查询时格式化:
SELECT LPAD(id::TEXT, 4, '0') AS id, name FROM users;
方法2:存储为带前导零的字符串(不推荐)
如果业务要求必须将ID存储为0001这类字符串,可以通过触发器自动生成:
MySQL示例
- 创建表:
CREATE TABLE users ( id VARCHAR(4) PRIMARY KEY, name VARCHAR(50) NOT NULL );
- 创建触发器自动生成ID:
DELIMITER // CREATE TRIGGER generate_user_id BEFORE INSERT ON users FOR EACH ROW BEGIN DECLARE next_id INT; -- 获取当前最大ID的数值加1,若表为空则从1开始 SELECT IFNULL(MAX(CAST(id AS UNSIGNED)), 0) + 1 INTO next_id FROM users; SET NEW.id = LPAD(next_id, 4, '0'); END // DELIMITER ;
插入数据时无需指定id字段,触发器会自动生成符合要求的4位ID。
内容的提问来源于stack exchange,提问作者me robi
相关产品推荐
相关产品推荐

