ИЗМЕНЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ
Синтаксис
ALTER SEQUENCE [IF EXISTS] sequence_name [ INCREMENT [ BY | = ] increment ] [ MINVALUE [=] minvalue | NO MINVALUE | NOMINVALUE ] [ MAXVALUE [=] maxvalue | NO MAXVALUE | NOMAXVALUE ] [ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ] [ RESTART [[WITH | =] restart]
ALTER SEQUENCE позволяет изменить любые значения для SEQUENCE, созданной с помощью CREATE SEQUENCE.
Параметры для ALTER SEQUENCE могут быть указаны в любом порядке.
Описание
ALTER SEQUENCE изменяет параметры существующего генератора последовательностей. Любые параметры, не указанные явно в команде ALTER SEQUENCE, сохраняют свои предыдущие значения.
Для использования ALTER SEQUENCE требуется привилегия ALTER.
Аргументы для ALTER SEQUENCE
Можно использовать следующие параметры:
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
INCREMENT |
1 | Приращение для использования в значениях. Может быть отрицательным. |
MINVALUE |
1, если INCREMENT > 0 и -9223372036854775807, если INCREMENT < 0 |
Минимальное значение для последовательности. |
MAXVALUE |
9223372036854775806, если INCREMENT > 0 и -1, если INCREMENT < 0 |
Максимальное значение для последовательности. |
START |
MINVALUE если INCREMENT > 0 и MAX_VALUE если INCREMENT< 0 |
Первое значение, которое сгенерирует последовательность. |
CACHE |
1000 | Количество значений, которые должны быть кэшированы. 0, если нет CACHE. Базовая таблица будет обновляться в первый раз, когда генерируется новое число последовательности, и каждый раз, когда кеш исчерпан. |
CYCLE |
0 (= NO CYCLE) |
1, если последовательность должна начинаться снова с MINVALUE после исчерпания значений. |
RESTART |
START если значение параметра restart не указано |
Если используется параметр RESTART, NEXT VALUE вернет значение перезапуска. |
Необязательная часть RESTART [ WITH restart ] устанавливает следующее значение для последовательности. Это эквивалентно вызову функции SETVAL() с аргументом is_used как 0. Указанное значение будет возвращено при следующем вызове nextval. Использование RESTART без значения перезапуска эквивалентно указанию начального значения, записанного в CREATE SEQUENCE или последнего значения, установленного ALTER SEQUENCE START WITH.
ALTER SEQUENCE не позволит изменить последовательность так, чтобы она была несогласованной. Например:
CREATE SEQUENCE s1; ALTER SEQUENCE s1 MINVALUE 10; ERROR 4061 (HY000): Sequence 'test.t1' values are conflicting ALTER SEQUENCE s1 MINVALUE 10 RESTART 10; ERROR 4061 (HY000): Sequence 'test.t1' values are conflicting ALTER SEQUENCE s1 MINVALUE 10 START 10 RESTART 10;
Вставка
Чтобы позволить объектам SEQUENCE быть резервными копиями старыми инструментами, такими как mariadb-dump, можно использовать SELECT для чтения текущего состояния объекта SEQUENCE и использовать INSERT для обновления объекта SEQUENCE. INSERT разрешено только в том случае, если все поля указаны:
CREATE SEQUENCE s1; INSERT INTO s1 VALUES(1000,10,2000,1005,1,1000,0,0); SELECT * FROM s1; +------------+-----------+-----------+-------+-----------+-------+-------+-------+ | next_value | min_value | max_value | start | increment | cache | cycle | round | +------------+-----------+-----------+-------+-----------+-------+-------+-------+ | 1000 | 10 | 2000 | 1005 | 1 | 1000 | 0 | 0 | +------------+-----------+-----------+-------+-----------+-------+-------+-------+ SHOW CREATE SEQUENCE s1; +-------+--------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------+ | s1 | CREATE SEQUENCE `s1` start with 1005 minvalue 10 maxvalue 2000 increment by 1 cache 1000 nocycle ENGINE=Aria | +-------+--------------------------------------------------------------------------------------------------------------+
Примечания
ALTER SEQUENCE мгновенно повлияет на все последующие операции SEQUENCE. Это в отличие от некоторых других баз данных, где изменения, запрошенные ALTER SEQUENCE, не будут видны до тех пор, пока кеш последовательности не исчерпается.
ALTER SEQUENCE заблокирует всю таблицу объекта последовательности во время своей (кратковременной) работы. Это гарантирует, что ALTER SEQUENCE будет правильно реплицировано. Если вы хотите только установить следующее значение последовательности на значение больше текущего, используйте SETVAL() вместо этого, так как это не блокирует.
Если вы хотите изменить движок хранения, комментарий к последовательности или переименовать последовательность, используйте ALTER TABLE для этого.
См. также
- Обзор последовательностей
- CREATE SEQUENCE
- DROP SEQUENCE
- NEXT VALUE FOR
- PREVIOUS VALUE FOR
- SETVAL(). Установка следующего значения для последовательности.
- АВТОИНКРЕМЕНТ
- ALTER TABLE
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/alter-sequence/