理解(理解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: シーケンスの値を変更できる