Spec-Zone.ru › MariaDB

SETVAL

MariaDB, начиная с 10.3.1

SEQUENCE были введены в MariaDB 10.3.

Синтаксис

SETVAL(sequence_name, next_value, [is_used, [round]])

Описание

Устанавливает следующее возвращаемое значение для SEQUENCE.

Эта функция совместима с синтаксисом PostgreSQL, расширенным аргументом round.

Если аргумент is_used не задан или равен 1 или true, то следующее используемое значение будет на единицу больше заданного значения. Если is_used равен 0 или false, то следующее сгенерированное значение будет равно заданному значению.

Если используется round, то он установит значение round (или внутренний счетчик циклов, начинающийся с нуля) для последовательности. Если round не используется, предполагается, что он равен 0.

next_value должен быть целочисленной константой.

Для таблиц SEQUENCE, определенных с помощью CYCLE (см. CREATE SEQUENCE), следует использовать как next_value, так и round, чтобы определить следующее значение. В этом случае текущее значение последовательности определяется как round, next_value.

Результат, возвращаемый SETVAL() — next_value или NULL, если заданное next_value и round меньше текущего значения.

SETVAL() не установит значение SEQUENCE на значение, меньшее текущего значения. Это необходимо для обеспечения репликации SETVAL(). Если вы хотите установить значение SEQUENCE на меньшее число, используйте ALTER SEQUENCE.

Если используется CYCLE, сначала сравниваются round и next_value, чтобы определить, является ли значение больше текущего значения.

Внутренне в сервере MariaDB используется SETVAL(), чтобы уведомить подчиненные узлы о том, что значение SEQUENCE изменилось. Подчиненный узел может получить SETVAL() в неправильном порядке, но это нормально, поскольку только наибольшее значение окажет влияние.

Для SETVAL требуется право INSERT.

Примеры

SELECT setval(foo, 42);           -- Next nextval will return 43
SELECT setval(foo, 42, true);     -- Same as above
SELECT setval(foo, 42, false);    -- Next nextval will return 42

Установка более высоких и более низких значений в последовательности с шагом 10:

SELECT NEXTVAL(s);
+------------+
| NEXTVAL(s) |
+------------+
|         50 |
+------------+

SELECT SETVAL(s, 100);
+----------------+
| SETVAL(s, 100) |
+----------------+
|            100 |
+----------------+

SELECT NEXTVAL(s);
+------------+
| NEXTVAL(s) |
+------------+
|        110 |
+------------+

SELECT SETVAL(s, 50);
+---------------+
| SETVAL(s, 50) |
+---------------+
|          NULL |
+---------------+

SELECT NEXTVAL(s);
+------------+
| NEXTVAL(s) |
+------------+
|        120 |
+------------+

Пример, демонстрирующий round:

CREATE OR REPLACE SEQUENCE s1
  START WITH 1
  MINVALUE 1
  MAXVALUE 99
  INCREMENT BY 1 
  CACHE 20 
  CYCLE;

SELECT SETVAL(s1, 99, 1, 0);
+----------------------+
| SETVAL(s1, 99, 1, 0) |
+----------------------+
|                   99 |
+----------------------+

SELECT NEXTVAL(s1);
+-------------+
| NEXTVAL(s1) |
+-------------+
|           1 |
+-------------+

Следующее утверждение вернет NULL, поскольку заданное next_value и round меньше текущего значения.

SELECT SETVAL(s1, 99, 1, 0);
+----------------------+
| SETVAL(s1, 99, 1, 0) |
+----------------------+
|                 NULL |
+----------------------+

SELECT NEXTVAL(s1);
+-------------+
| NEXTVAL(s1) |
+-------------+
|           2 |
+-------------+

Увеличение значения округления с нуля до 1 позволит вернуть next_value.

SELECT SETVAL(s1, 99, 1, 1);
+----------------------+
| SETVAL(s1, 99, 1, 1) |
+----------------------+
|                   99 |
+----------------------+

SELECT NEXTVAL(s1);
+-------------+
| NEXTVAL(s1) |
+-------------+
|           1 |
+-------------+

См. также

  • Обзор последовательностей
  • ALTER SEQUENCE
  • CREATE SEQUENCE
  • NEXT VALUE FOR
  • PREVIOUS VALUE FOR
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/setval/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API