理解(理解PostgreSQL中的)序列

序列是什么?

只需一种选项,用中文本地化以下内容(日本语版手册有)

日本語版マニュアル的意思是日语版手册。

序列对象(也称为序列生成器或仅称为序列)是由CREATE SEQUENCE命令创建的一行特殊表。序列对象通常用于生成表行的唯一标识符。

写着。简单解释一下,这就是。

生成连续编号的对象。

这样的理解可以接受。

这主要用于需要连续编号的情况,如生成主键和唯一ID等。

尝试实际使用一下

CREATE SEQUENCE example_table_id_seq   -- シーケンス名
    INCREMENT BY 1                     -- 増分値
    MINVALUE 1                         -- 最小値
    MAXVALUE 2147483647                -- 最大値
    START WITH 1                       -- 初期値
    CACHE 1;                           -- キャッシュ値
CREATE TABLE example_table (
    -- nextval()を使ってシーケンスの次の値を取ってくる
    id INTEGER PRIMARY KEY DEFAULT nextval('example_table_id_seq'),
    name VARCHAR(255)
);

由于在id列中设置了序列,因此我尝试着在不指定id值的情况下进行插入。

INSERT INTO example_table (name) VALUES
('denji'),
('power'),
('aki');

最后,为id分配了连续的编号。

idname1denji2power3aki

关于SERIAL类型

将列的数据类型设为SERIAL后,它会自动创建和设置前述的序列。

CREATE TABLE example_table (
    id SERIAL PRIMARY KEY, -- SERIAL
    name VARCHAR(255)
);

在内部自动创建名为”表名_列名_seq”的序列。例如,在这种情况下,会生成名为”example_table_id_seq”的序列。

此外,如果使用SERIAL,序列的设置如下(与前述设置相同)。

CREATE SEQUENCE example_table_id_seq   -- シーケンス名
    INCREMENT BY 1                     -- 増分値
    MINVALUE 1                         -- 最小値
    MAXVALUE 2147483647                -- 最大値
    START WITH 1                       -- 初期値
    CACHE 1;                           -- キャッシュ値

补充说明,当数据类型为INTEGER和BIGINT时,MAXVALUE的值会变化。
INTEGER: 2147483647
BIGINT: 9223372036854775807

另外,当数据类型为INTEGER和BIGINT时,MAXVALUE的值会有所不同。
INTEGER的最大值为2147483647,
而BIGINT的最大值为9223372036854775807。

给序列授予权限

为了避免序列的值被擅自改变,授予权限在安全方面是至关重要的。

-- 付与
GRANT USAGE ON SEQUENCE example_sequence TO example_user;

-- 取消
REVOKE USAGE ON SEQUENCE example_sequence FROM example_user;
    • USAGE :シーケンスの値を取得できるが、変更はできない

 

    UPDATE: シーケンスの値を変更できる
广告
将在 10 秒后关闭
bannerAds