自增列与序列的用法

最近更新时间:2024-07-24 17:02:21

我的收藏

序列的创建和访问

[tbase@VM_0_29_centos tbase_mgr]$ psql -p 15432 -U tbase -d postgres
psql (PostgreSQL 10 (TBase 2.01))
Type "help" for help.

-- 建立序列
postgres=# create sequence tbase_seq;
CREATE SEQUENCE

-- 建立序列,不存在时才创建
postgres=# create sequence IF NOT EXISTS tbase_seq;
NOTICE: relation "tbase_seq" already exists, skipping
CREATE SEQUENCE

-- 查看序列当前的使用状况
postgres=# \\\\x
Expanded display is on.
postgres=# select * from tbase_seq ;
-[ RECORD 1 ]-
last_value | 1
log_cnt | 0
is_called | f

-- 获取序列的下一个值
postgres=# select nextval('tbase_seq');
nextval
---------
1

-- 获取序列的当前值,这个需要在访问 nextval()后才能使用
postgres=# select currval('tbase_seq');
currval
---------
1

-- 可以后下面的方式来获取序列当前使用到那一个值
postgres=# select last_value from tbase_seq ;
last_value
------------
3

-- 设置序列当前值
postgres=# select setval('tbase_seq',1);
setval
--------
1

序列在 DML 中使用

-- 插入数据,使用序列
postgres=# INSERT INTO t (id, nickname) VALUES (nextval('tbase_seq'), 'TBase 好');
INSERT 0 1

postgres=# select * from t;
id | nickname
----+-----------
1 | 腾讯 TBase
2 | TBase 好
(2 rows)

序列作为字段的默认值使用

-- 将序列设置为字段的默认值
postgres=# alter table t alter column id set default nextval('tbase_seq');

-- 插入数据,字段使用序列默认值
postgres=# INSERT INTO t (nickname) VALUES ('hello TBase');

postgres=# select * from t;
id | nickname
----+-------------
3 | hello TBase
1 | 腾讯 TBase
2 | TBase 好
(3 rows)

序列作为字段类型使用

-- 删除表
postgres=# drop table t;
DROP TABLE

-- 创建表,字段使用序列类型
postgres=# create table t (id serial not null, nickname text);
CREATE TABLE

-- 插入数据,字段自动使用序列
postgres=# INSERT INTO t (nickname) VALUES ('hello TBase');
INSERT 0 1

postgres=# select * from t;
id | nickname
----+-------------
1 | hello TBase
(1 row)

删除序列

-- 删除序列
postgres=# drop sequence tbase_seq;
DROP SEQUENCE

-- 删除序列,不存在时跳过
postgres=# drop sequence IF EXISTS tbase_seq;
NOTICE: sequence "tbase_seq" does not exist, skipping
DROP SEQUENCE