PostgreSQL 自动增长
概述
PostgreSQL 使用 SERIAL 和 IDENTITY 列来实现自动增长值。
SERIAL
sql
-- 创建序列和自动增长列
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
-- 等效于:
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
id INTEGER NOT NULL DEFAULT nextval('users_id_seq') PRIMARY KEY
);BIGSERIAL
sql
-- 适用于大型表
CREATE TABLE logs (
id BIGSERIAL PRIMARY KEY,
message TEXT
);SMALLSERIAL
sql
-- 适用于小范围
CREATE TABLE small_table (
id SMALLSERIAL PRIMARY KEY,
name VARCHAR(50)
);IDENTITY 列
sql
-- 标准 SQL 标识列
CREATE TABLE users (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
-- 默认生成
CREATE TABLE orders (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
user_id INTEGER NOT NULL
);序列函数
sql
-- 获取下一个值
SELECT nextval('users_id_seq');
-- 获取当前值
SELECT currval('users_id_seq');
-- 设置值
SELECT setval('users_id_seq', 1000);
-- 获取序列的最后一个值
SELECT lastval();管理序列
sql
-- 修改序列
ALTER SEQUENCE users_id_seq RESTART WITH 1000;
ALTER SEQUENCE users_id_seq INCREMENT BY 2;
ALTER SEQUENCE users_id_seq MINVALUE 1 NO MAXVALUE;小结
自动增长的方式包括:
- SERIAL(整数型)、BIGSERIAL、SMALLSERIAL
- IDENTITY(标准 SQL)
- 序列函数:nextval、currval、setval
- 使用 ALTER SEQUENCE 进行管理