Skip to content

Latest commit

 

History

History
103 lines (72 loc) · 3.72 KB

File metadata and controls

103 lines (72 loc) · 3.72 KB
title CREATE SEQUENCE
sidebar_position 1

import FunctionDescription from '@site/src/components/FunctionDescription';

在 Databend 中创建一个新的序列(Sequence)。

序列(Sequence)是一种自动生成唯一数字标识符的对象,通常用于为表行分配不同的值(例如用户 ID)。虽然序列保证值的唯一性,但保证连续性(即可能出现间隙)。

语法

CREATE [ OR REPLACE ] SEQUENCE [ IF NOT EXISTS ] <sequence>
    [ START [ = ] <start_value> ]
    [ INCREMENT [ = ] <increment_value> ]
参数 描述 默认值
<sequence> 要创建的序列名称。 -
START 序列的初始值。 1
INCREMENT 每次调用 NEXTVAL 时的增量值。 1

访问控制要求

权限 对象类型 描述
CREATE SEQUENCE 全局 创建序列。

要创建序列,执行操作的用户或 current_role 必须拥有 CREATE SEQUENCE 权限

:::note

enable_experimental_sequence_rbac_check 设置控制序列级别的访问控制,默认禁用。
此时创建序列仅需用户拥有超级用户权限,绕过详细的 RBAC 检查。
启用后,将在创建序列时执行细粒度权限验证。

该功能为实验性质,未来可能默认开启。

:::

示例

基本序列

使用默认设置创建序列(从 1 开始,步长为 1):

CREATE SEQUENCE staff_id_seq;

CREATE TABLE staff (
    staff_id INT,
    name VARCHAR(50),
    department VARCHAR(50)
);

INSERT INTO staff (staff_id, name, department)
VALUES (NEXTVAL(staff_id_seq), 'John Doe', 'HR');

INSERT INTO staff (staff_id, name, department)
VALUES (NEXTVAL(staff_id_seq), 'Jane Smith', 'Finance');

SELECT * FROM staff;

┌───────────────────────────────────────────────────────┐
│     staff_id    │       name       │    department    │
├─────────────────┼──────────────────┼──────────────────┤
│               2 │ Jane Smith       │ Finance          │
│               1 │ John Doe         │ HR               │
└───────────────────────────────────────────────────────┘

自定义起始值与步长

创建从 1000 开始、步长为 10 的序列:

CREATE SEQUENCE order_id_seq START = 1000 INCREMENT = 10;

CREATE TABLE orders (
    order_id BIGINT,
    order_name VARCHAR(100)
);

INSERT INTO orders (order_id, order_name)
VALUES (NEXTVAL(order_id_seq), 'Order A');

INSERT INTO orders (order_id, order_name)
VALUES (NEXTVAL(order_id_seq), 'Order B');

SELECT * FROM orders;

┌──────────────────────────────────┐
│    order_id    │    order_name   │
├────────────────┼─────────────────┤
│           1000 │ Order A         │
│           1010 │ Order B         │
└──────────────────────────────────┘