共计 1562 个字符,预计需要花费 4 分钟才能阅读完成。
不知道你会不会遇到类似这样的情况,比如有一个 orders(订单)
表,我们把 ID 作为订单的 ID,方便查询以及前端的显示,但是默认情况下,ID 自增是从 1 开始的,为了前端显示的效果通常我们会将 ID 从 6(N)位数开始,这个时候就需要修改默认的自增起始值了。
基于这种情况我们来做以下的演示操作。
环境
- 运行 postgresql
我这里通过 docker 的方式启动 postgresql
$ docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=zhiqiang.name postgres
默认的密码为zhiqiang.name
- 版本
连接到 postgres 之后就会显示版本
$ psql -h localhost -U postgres
Password for user postgres: # 输入密码
psql (11.2)
Type "help" for help.
postgres=# exit
创建建 orders 表
- 创建 orders 表
create table orders
(
id serial,
product_name varchar(100)
);
通过 serial
创建自增 ID,同时会创建属于这个表的自增序列,名为:orders_id_seq
,并将 ID 字段设置为not null
- 查看序列名称
使用命令:\d 表名
postgres=# \d orders
Table "public.orders"
Column | Type | Collation | Nullable | Default
--------------+------------------------+-----------+----------+------------------------------------
id | integer | | not null | nextval('orders_id_seq'::regclass)
product_name | character varying(100) | | |
其中 orders_id_seq
就是序列的名称
- 添加测试数据
insert into orders(product_name)
values ('MacMini'),
('MacBook'),
('iPhone');
- 查看数据
postgres=# select * from orders;
id | product_name
----+--------------
1 | MacMini
2 | MacBook
3 | iPhone
(3 rows)
上述的数据 ID 是从 1 开始,然后依次递增。
更改自增 ID 的起始值
postgres=# SELECT setval('orders_id_seq', 100000, true); -- 下一个 ID 值为 100001
setval
--------
100000
(1 row)
如果 setval
的第三个值不添加为 true,下一个 ID 值为100000
,设置为 true 则表示设置的当前序列值 +1
- 插入数据
postgres=# insert into orders(product_name) values ('iPad');
INSERT 0 1
- 查看
postgres=# select * from orders;
id | product_name
--------+--------------
1 | MacMini
2 | MacBook
3 | iPhone
100001 | iPad
(4 rows)
可以看到 iPad
的 ID 为100001
把当前最大的 ID 做为当前的 ID 自增起始值
postgres=# select setval('orders_id_seq', (select max(id) from orders));
setval
--------
100001
(1 row)
参考文献
正文完
发表至: Linux
2019-08-31