New in v2.0: CREATE SEQUENCE语句在数据库中创建新序列。 使用序列在表中自动递增整数。

注意事项

所需权限

用户必须具有父数据库的CREATE特权。

概要

图片

参数

Parameter Description
seq_name 要创建的序列的名称,该序列在其数据库中必须是唯一的,并遵循标识符规则。 如果未设置默认父数据库,则必须将名称格式设置为database.seq_name
INCREMENT 序列递增的值。 负数会创建降序。 正数表示升序。

默认: 1
MINVALUE 序列的最小值。 如果未指定默认值或输入NO MINVALUE,则应用默认值。

升序默认值:1

降序默认值:MININT
MAXVALUE 序列的最大值。 如果未指定默认值或输入NO MAXVALUE,则应用默认值。

升序默认值:MAXINT

降序默认值:-1
START 序列的第一个值。

升序的默认值:1

降序的默认值:-1
NO CYCLE 目前所有序列都设置为NO CYCLE,序列不会回环重用。

序列函数

我们支持以下SQL序列函数:

示例

列出所有序列

> SELECT * FROM information_schema.sequences;
+------------------+-----------------+--------------------+-----------+-------------------+-------------------------+---------------+-------------+----------------------+---------------------+-----------+--------------+
| sequence_catalog | sequence_schema |   sequence_name    | data_type | numeric_precision | numeric_precision_radix | numeric_scale | start_value |    minimum_value     |    maximum_value    | increment | cycle_option |
+------------------+-----------------+--------------------+-----------+-------------------+-------------------------+---------------+-------------+----------------------+---------------------+-----------+--------------+
| def              | db_2            | test_4             | INT       |                64 |                       2 |             0 |           1 |                    1 | 9223372036854775807 |         1 | NO           |
| def              | test_db         | customer_seq       | INT       |                64 |                       2 |             0 |         101 |                    1 | 9223372036854775807 |         2 | NO           |
| def              | test_db         | desc_customer_list | INT       |                64 |                       2 |             0 |        1000 | -9223372036854775808 |                  -1 |        -2 | NO           |
| def              | test_db         | test_sequence3     | INT       |                64 |                       2 |             0 |           1 |                    1 | 9223372036854775807 |         1 | NO           |
+------------------+-----------------+--------------------+-----------+-------------------+-------------------------+---------------+-------------+----------------------+---------------------+-----------+--------------+
(4 rows)

使用默认设置创建序列

在此示例中,我们使用默认设置创建序列:

> CREATE SEQUENCE customer_seq;
> SHOW CREATE SEQUENCE customer_seq;
+--------------+------------------------------------------------------------------------------------------+
|   Sequence   |                                      CreateSequence                                      |
+--------------+------------------------------------------------------------------------------------------+
| customer_seq | CREATE SEQUENCE customer_seq MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT 1 START 1 |
+--------------+------------------------------------------------------------------------------------------+

使用用户定义的设置创建序列

在这个例子中,我们创建一个从-1开始并以2为增量减少的序列。

> CREATE SEQUENCE desc_customer_list START -1 INCREMENT -2;
> SHOW CREATE SEQUENCE desc_customer_list;
+--------------------+----------------------------------------------------------------------------------------------------+
|      Sequence      |                                           CreateSequence                                           |
+--------------------+----------------------------------------------------------------------------------------------------+
| desc_customer_list | CREATE SEQUENCE desc_customer_list MINVALUE -9223372036854775808 MAXVALUE -1 INCREMENT -2 START -1 |
+--------------------+----------------------------------------------------------------------------------------------------+

使用序列创建表

在这个例子中,使用我们在第一个例子中创建的序列作为主键创建一个表:

> CREATE TABLE customer_list (
    id INT PRIMARY KEY DEFAULT nextval('customer_seq'),
    customer string,
    address string
  );

插入几条记录,查看序列:

> INSERT INTO customer_list (customer, address)
  VALUES
    ('Lauren', '123 Main Street'),
    ('Jesse', '456 Broad Ave'),
    ('Amruta', '9876 Green Parkway');
> SELECT * FROM customer_list;
+----+----------+--------------------+
| id | customer |      address       |
+----+----------+--------------------+
|  1 | Lauren   | 123 Main Street    |
|  2 | Jesse    | 456 Broad Ave      |
|  3 | Amruta   | 9876 Green Parkway |
+----+----------+--------------------+

查看序列的当前值

要在不递增序列的情况下查看当前值,请使用:

> SELECT * FROM customer_seq;
+------------+---------+-----------+
| last_value | log_cnt | is_called |
+------------+---------+-----------+
|          3 |       0 |   true    |
+------------+---------+-----------+

返回log_cntis_called列仅是为了PostgreSQL兼容性; 它们不存储在数据库中。

如果已经从当前会话中的序列获取了一个值,你还可以使用currval('seq_name')函数来获取最近获得的值:

> SELECT currval('customer_seq');
+---------+
| currval |
+---------+
|       3 |
+---------+

See Also