在 PostgreSQL 中,“自增”通常通过 序列(Sequence) 或 IDENTITY 列(PostgreSQL 10+) 来实现。下面按常见方式介绍。
SERIAL(最常用,兼容旧版本)SERIAL 本质是基于序列的语法糖。
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
等价于:
id 默认值设为 nextval('users_id_seq')插入数据:
INSERT INTO users (name) VALUES ('Alice');
-- id 会自动生成
BIGSERIAL(更大范围)适合数据量大的表:
CREATE TABLE logs (
id BIGSERIAL PRIMARY KEY,
content TEXT
);
IDENTITY(PostgreSQL 10+ 推荐 ✅)更符合 SQL 标准,未来更推荐。
GENERATED BY DEFAULT AS IDENTITYCREATE TABLE orders (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
amount NUMERIC
);
GENERATED ALWAYS AS IDENTITYCREATE TABLE orders (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
amount NUMERIC
);
CREATE SEQUENCE user_id_seq
START WITH 1
INCREMENT BY 1;
CREATE TABLE users (
id INT DEFAULT nextval('user_id_seq') PRIMARY KEY,
name VARCHAR(50)
);
-- 下一个值(会消耗)
SELECT nextval('users_id_seq');
-- 当前值(不消耗)
SELECT currval('users_id_seq');
-- 重置序列
ALTER SEQUENCE users_id_seq RESTART WITH 1;
或:
SELECT setval('users_id_seq', 1);
| 方式 | 推荐度 | 说明 |
|---|---|---|
| SERIAL | ⭐⭐⭐ | 简单、兼容好 |
| BIGSERIAL | ⭐⭐⭐ | 大表推荐 |
| IDENTITY | ⭐⭐⭐⭐⭐ | 新项目首选 |
如果你有 具体版本(如 PG 9 / 12 / 15) 或 迁移 MySQL 自增表 的需求,我可以给你更精准的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。