【问题标题】:it's possible to use sequences in mariaDB Server?可以在 mariaDB 服务器中使用序列吗?
【发布时间】:2019-02-26 08:03:20
【问题描述】:

序列是一种替代方法,例如在表中的每条记录上创建主键。

所以这是我实际使用的常用语法

CREATE TABLE users(
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) UNIQUE NOT NULL
);

如您所见,我实施的常见解决方案是PRIMARY KEY clausule

但是诸如Oracle或PostgreSQL之类的RDBMS是否可以使用序列来替换以前的代码

例如在 Oracle 中你声明

CREATE SEQUENCE id
START WITH 1
INCREMENT BY 1;

或者在PostgreSQL中这种方式

CREATE SEQUENCE id
START WITH 1
INCREMENT BY 1;

但这在 mariaDB Server 中可行吗?

【问题讨论】:

    标签: sql syntax mariadb sequence ddl


    【解决方案1】:

    在 MariaDB 自 10.3 版本以来,可以在本地使用序列创建;通过下面的例子你可以看到它是如何实现的

    首先让我们创建表序列

    CREATE SEQUENCE id
    START WITH 1
    INCREASE BY 1;
    

    例如,如果我们想查看新创建的表 id 的结构;只需在控制台中执行以下操作

    MariaDB [blog]> describe id;
    +-----------------------+---------------------+------+-----+---------+-------+
    | Field                 | Type                | Null | Key | Default | Extra |
    +-----------------------+---------------------+------+-----+---------+-------+
    | next_not_cached_value | bigint(21)          | NO   |     | NULL    |       |
    | minimum_value         | bigint(21)          | NO   |     | NULL    |       |
    | maximum_value         | bigint(21)          | NO   |     | NULL    |       |
    | start_value           | bigint(21)          | NO   |     | NULL    |       |
    | increment             | bigint(21)          | NO   |     | NULL    |       |
    | cache_size            | bigint(21) unsigned | NO   |     | NULL    |       |
    | cycle_option          | tinyint(1) unsigned | NO   |     | NULL    |       |
    | cycle_count           | bigint(21)          | NO   |     | NULL    |       |
    +-----------------------+---------------------+------+-----+---------+-------+
    

    从上表中您可以注意到重要的细节,例如默认数值的类型为BIGINT

    所以正如我们所说的,它将从 1 开始,再增加一个,它允许我们生成可以关联的渐进式数字,就像一个表的主数

    让我们在 mariaDB 管理器中创建一个新的示例表

    MariaDB [blog]> CREATE TABLE demo (
    -> id BIGINT NOT NULL,
    -> name VARCHAR (30),
    -> PRIMARY KEY (id));
    

    最后,在声明自增类型的主键时,不需要在插入语句中声明,当我们使用序列时,如果需要写列名;如下例

    MariaDB [blog]> INSERT INTO demo (id, name)
    -> VALUES
    -> (NEXT VALUE FOR id, 'alpha');
    

    如何观察前面的序列,插入序列生成的动态值,我们通过NEXT VALUE调用序列的名称,并在末尾为序列id的名称

    最后可以得到我们上一句的结果,我们定时对表执行一次SELECT,得到如下

    MariaDB [blog]> SELECT * FROM demo;
    + ---- + ------ +
    | id | name     |
    + ---- + ------ +
    | 1 | alpha     |
    + ---- + ------ +
    

    额外配置:

    您可以选择在 mariaDB 管理器中为序列配置以下参数:

    1. minvalue = 你可以设置 1
      1. maxvalue = 根据您选择的数据类型是 INT 还是 BIGINT,您必须检查以设置符合以下限制的上限 那些数据类型
      2. Cycle = 默认情况下它有选项无循环,否则,一旦最小值开始并达到最大值,计数器 重新启动并重新开始编号(前提是限制 数据类型)可能)

    【讨论】:

      【解决方案2】:

      总之——是的。该功能从 10.3 版开始可用。

      详情请参阅the documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-05
        • 2012-06-10
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 2022-01-24
        相关资源
        最近更新 更多