PostgreSQL 为什么序列只增加一次有两个 "nextval"
PostgreSQL Why sequence increases only once with two "nextval"
我正在实现一个带有评论功能的看板。
我用 nextval
创建了一个像这样的 table
create table tr_board
(
b_id varchar(20) not null default nextval('seq_board'),
title varchar(256),
content varchar(500),
user_id varchar(30),
update_date timestamp not null,
is_complete varchar(1) default 0,
is_private varchar(1) default 0
);
这是我的插入 sql。
<insert id="addBoard" parameterType="java.util.HashMap">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select nextval('seq_board') as id;
</selectKey>
insert into tr_board
(
b_id,
title,
content,
user_id,
is_private,
update_date
)
values
(
#{id},
#{title},
#{content},
#{user_id},
#{is_private},
current_timestamp at time zone 'utc'
)
</insert>
我在"create"和"insert"的"default"中使用了nextval
。
所以我认为序列会增加两倍。
但是为什么序列只增加一次,即使总共有两个 nextval 存在?
非常感谢您的回复。
仅当未提供值或您明确要求使用默认值时,默认列上的 nextval()
才会被调用。您正在获取一个序列值,然后将其作为值传递给 b_id 列,因此它不会尝试获取序列中的下一个值,因为不需要默认值。如果你得到值,它只会调用它两次,然后什么也不做,需要使用默认值。
我正在实现一个带有评论功能的看板。
我用 nextval
create table tr_board
(
b_id varchar(20) not null default nextval('seq_board'),
title varchar(256),
content varchar(500),
user_id varchar(30),
update_date timestamp not null,
is_complete varchar(1) default 0,
is_private varchar(1) default 0
);
这是我的插入 sql。
<insert id="addBoard" parameterType="java.util.HashMap">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select nextval('seq_board') as id;
</selectKey>
insert into tr_board
(
b_id,
title,
content,
user_id,
is_private,
update_date
)
values
(
#{id},
#{title},
#{content},
#{user_id},
#{is_private},
current_timestamp at time zone 'utc'
)
</insert>
我在"create"和"insert"的"default"中使用了nextval
。
所以我认为序列会增加两倍。
但是为什么序列只增加一次,即使总共有两个 nextval 存在?
非常感谢您的回复。
仅当未提供值或您明确要求使用默认值时,默认列上的 nextval()
才会被调用。您正在获取一个序列值,然后将其作为值传递给 b_id 列,因此它不会尝试获取序列中的下一个值,因为不需要默认值。如果你得到值,它只会调用它两次,然后什么也不做,需要使用默认值。