您好,登錄后才能下訂單哦!
我們在創(chuàng)建表時(shí),經(jīng)常需要使用到自增id,往往這么寫,
create table test (
id serial, #使用serial來創(chuàng)建一個(gè)自增id
name varchar(64) not null
)
通過serial創(chuàng)建自增id,同時(shí)會(huì)創(chuàng)建屬于這個(gè)表的自增序列,并將id字段設(shè)置為not null
serial和bigserial類型不是真正的類型,只是為在表中設(shè)置唯一標(biāo)識(shí)做的概念上的便利,本質(zhì)上是創(chuàng)建了一個(gè)序列發(fā)生器,然后把自增字段的默認(rèn)值設(shè)置為這個(gè)序列發(fā)生器的nextval
CREATE TABLE tablename (
colname SERIAL
);
等價(jià)于
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename(
colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);
postgres=# \d+ test5_id_seq
Sequence "public.test5_id_seq"
Column | Type | Value | Storage
---------------+---------+---------------------+---------
sequence_name | name | test5_id_seq | plain
last_value | bigint | 1 | plain
start_value | bigint | 1 | plain #序列起始值
increment_by | bigint | 1 | plain #每次遞增值
max_value | bigint | 9223372036854775807 | plain #最大值
min_value | bigint | 1 | plain #最小值
cache_value | bigint | 1 | plain
log_cnt | bigint | 0 | plain
is_cycled | boolean | f | plain #是否循環(huán)
is_called | boolean | f | plain
Owned by: public.test5.id
因?yàn)樽栽霰举|(zhì)上是取序列發(fā)生器的下一個(gè)值,所以可以多個(gè)表共用一個(gè)序列發(fā)生器,可以實(shí)現(xiàn)多表唯一值,當(dāng)然,還可以設(shè)置序列是否可循環(huán)來實(shí)現(xiàn)id循環(huán)
例如:
?
CREATE SEQUENCE name increment by 1 maxvalue 10 minvalue 1 start 1 cycle
下一個(gè)值:nextval(regclass)
當(dāng)前值:currval(regclass)
設(shè)置值:setval(regclass)
create table test_seq (
id int not null default nextval('my_seq1'),
name varchar(64)
)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。