mis*_*iso 5 postgresql primary-key auto-increment
我的 PostgreSQL 数据库中有一个简单的表,如下所示:
CREATE TABLE person_type
(
id serial NOT NULL,
name character(55) NOT NULL,
CONSTRAINT person_type_pkey PRIMARY KEY (id),
CONSTRAINT person_type_name_key UNIQUE (name)
)
Run Code Online (Sandbox Code Playgroud)
如您所见,id会自动递增,并且名称必须是唯一的。每次我运行 INSERT sql 语句时,即使它失败,id 也会增加 1。
我怎样才能防止这种情况?为了每次成功插入一行,主键是相关的
小智 6
这正是您所面临的:
test=# CREATE SEQUENCE seq_a;
CREATE SEQUENCE
test=# SELECT nextval('seq_a');
nextval
---------
1
(1 row)
test=# BEGIN;
BEGIN
test=# SELECT nextval('seq_a');
nextval
---------
2
(1 row)
test=# ROLLBACK;
ROLLBACK
test=# SELECT nextval('seq_a');
nextval
---------
3
(1 row)
Run Code Online (Sandbox Code Playgroud)
序列确保值是升序的,但不能确保它不包含间隙。同样重要的是要注意序列不能回滚。您不能同时拥有严格的上升和无间隙交易,因为它不适用于多头和空头交易的混合。因此序列不应该用于发票 ID 等。
归档时间: |
|
查看次数: |
5363 次 |
最近记录: |