共计 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