PostgreSQL中SERIAL类型能否从0开始?
在PostgreSQL中SERIAL类型能否从0开始?
SERIAL是PostgreSQL提供的语法糖,它会自动为整数列绑定一个自增序列,默认情况下这个序列的起始值是1,但这不代表无法让它从0开始。
你可以通过两种方式实现从0开始自增:
- 方式一:先创建起始值为0的序列,再关联到表列
-- 创建起始为0的序列 CREATE SEQUENCE users_id_seq START WITH 0; -- 创建表并将列默认值绑定到该序列 CREATE TABLE users ( id INTEGER NOT NULL DEFAULT nextval('users_id_seq'), name TEXT ); -- 绑定序列与列,确保删除表时序列一同被清理 ALTER SEQUENCE users_id_seq OWNED BY users.id;
- 方式二:先使用SERIAL创建表,再修改对应序列的起始值
CREATE TABLE users ( id SERIAL, name TEXT ); -- 修改序列,让其从0开始 ALTER SEQUENCE users_id_seq RESTART WITH 0;
完成设置后,插入数据时如果不手动指定id值,第一条数据的id就会是0,之后依次自增:
INSERT INTO users (name) VALUES ('Alice'); SELECT id FROM users; -- 返回结果为0
PostgreSQL文档中提到SERIAL取值范围从1开始,指的是它的默认行为,而非不可修改的限制。通过调整序列的起始值,完全可以实现从0开始的自增逻辑。
内容的提问来源于stack exchange,提问作者cassepipe
相关产品推荐
相关产品推荐

