можно использовать последовательности в сервере mariaDB? - PullRequest
0 голосов
/ 22 сентября 2018

Последовательность является альтернативой для создания, например, первичного ключа для каждой записи в ваших таблицах.

Так что это общий синтаксис, который я использую на самом деле

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

Как выможно увидеть общее решение, которое я реализовал, это PRIMARY KEY clausule

Но есть ли в СУБД, таких как Oracle или PostgreSQL, возможность использовать последовательности для замены предыдущего кода

Например, в Oracle вы объявляете

CREATE SEQUENCE id
START WITH 1
INCREMENT BY 1;

Или в PostgreSQL таким образом

CREATE SEQUENCE id
START WITH 1
INCREMENT BY 1;

Но это возможно на сервере mariaDB?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

В MariaDB начиная с версии 10.3 существует возможность изначально использовать создание последовательностей;В следующем примере вы можете увидеть, как это достигается

Сначала давайте создадим последовательность таблиц

CREATE SEQUENCE id
START WITH 1
INCREASE BY 1;

Если, например, мы хотим увидеть структуру идентификатора таблицы, то зановосоздано;просто выполните следующее в консоли

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');

Как можно наблюдать предыдущую последовательность, чтобы вставить динамическое значение, сгенерированное последовательностью, мы вызываем имя последовательности через СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ для имени и в конце имениидентификатор последовательности

Наконец, вы можете получить результат нашего предыдущего предложения, мы регулярно выполняем SELECT для таблицы и получаем следующие

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

Дополнительные конфигурации:

При желании вы можете настроить следующие параметры для последовательности в менеджере mariaDB:

  1. minvalue = Вы можете установить его 1
  2. maxvalue = В зависимости от типа данных, который вы выбираете, если это INT или BIGINT, вы должны поставить флажок, чтобы ограничить эти типы данных
  3. Cycle = По умолчаниюон имеет опцию без цикла, в противном случае, как только начинается минимальное значение и достигается максимальный предел, счетчик перезапускается и нумерация начинается снова (при условии, что возможен предел типа данных)
0 голосов
/ 22 сентября 2018

Одним словом - да.Эта функция доступна с версии 10.3.

См. в документации для получения полной информации.

...