温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PostgreSQL自增怎么实现

发布时间:2026-09-07 12:38:56 来源:亿速云 阅读:108 作者:小樊 栏目:数据库

在 PostgreSQL 中,“自增”通常通过 序列(Sequence) 或 IDENTITY 列(PostgreSQL 10+) 来实现。下面按常见方式介绍。


一、使用 SERIAL(最常用,兼容旧版本)

SERIAL 本质是基于序列的语法糖。

1️⃣ 建表时自动自增

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 标准,未来更推荐。

1️⃣ GENERATED BY DEFAULT AS IDENTITY

CREATE TABLE orders (
    id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    amount NUMERIC
);
  • 可手动插入 id(不推荐但允许)

2️⃣ GENERATED ALWAYS AS IDENTITY

CREATE TABLE orders (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    amount NUMERIC
);
  • 禁止手动插入 id(更安全)

四、手动创建序列(更灵活)

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 自增表 的需求,我可以给你更精准的方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手