Проблема

Представьте, что у вас есть две таблицы, которые могут быть объединены в будущем, и вы автоматически увеличиваете их идентификатор в настоящее время.

Теперь, если вы объедините обе эти таблицы, произойдет столкновение. Как нам предотвратить это. Давайте поймем нашего спасителя здесь

Что такое последовательности?

Последовательность — это объект базы данных, который генерирует серию уникальных чисел в последовательном порядке. Он часто используется для автоматического создания значений первичного ключа для таблиц.

Думайте о последовательности как о счетчике, который отслеживает следующий номер, который будет назначен. Каждый раз, когда из последовательности запрашивается новое число, возвращается следующее доступное значение.

Последовательности имеют следующие характеристики:

  1. Последовательный порядок: значения последовательности генерируются в последовательном порядке, что означает, что каждое число больше предыдущего.
  2. Уникальные значения. Значения последовательности уникальны в пределах последовательности. Они обеспечивают надежный и гарантированный способ создания уникальных идентификаторов для записей базы данных.
  3. Шаг увеличения: последовательности имеют шаг увеличения, который определяет разницу между последовательными числами в последовательности. Например, последовательность с шагом приращения 1 будет генерировать такие значения, как 1, 2, 3, 4 и т. д.
  4. Независимость: последовательности не зависят от данных, хранящихся в таблицах. Они поддерживаются отдельно и могут использоваться для создания уникальных идентификаторов в нескольких таблицах.
  5. Сохранение. Значения последовательности сохраняются даже после перезапуска базы данных или сервера. Они сохраняют свое состояние и продолжают генерировать уникальные номера без пробелов.

Теперь, когда мы поняли последовательность, давайте используем последовательность для решения нашей проблемы

Создать последовательность

Команда создания последовательности выглядит следующим образом

CREATE SEQUENCE sequence_name 
[ INCREMENT [ BY | = ] increment ] 
[ MINVALUE [=] minvalue | NO MINVALUE | NOMINVALUE ] 
[ MAXVALUE [=] maxvalue | NO MAXVALUE | NOMAXVALUE ] 
[ START [ WITH | = ] start ] 
[ CACHE [=] cache | NOCACHE ] 
[ CYCLE | NOCYCLE] [table_options]

Давайте рассмотрим варианты, представленные здесь,

имя_последовательности – ›укажите название своей последовательности.

increment -›опция указывает, на какое значение каждое значение должно быть увеличено после текущего значения, например: если приращение равно 3, оно будет выглядеть как 1, 4, 7 и т. д.

min_value –> минимальное значение последовательности

max_value-> максимальное значение, до которого выполняется последовательность, выше которого выдается ошибка последовательности.

Начать с –> начальное значение последовательности

кэш –>кэш показывает, какую ценность он может предоставить, не выполняя чтение/запись на диск. При промахе кеша он сделает запись на диск в созданную таблицу

цикл-> указывает, может ли последовательность начаться снова с базового значения

Давайте создадим последовательность сейчас,

CREATE SEQUENCE primary_key_seq START WITH 4

Это также создаст таблицу в базе данных. Таблица будет иметь следующие значения,

`next_not_cached_value` bigint(21) NOT NULL,
 `minimum_value` bigint(21) NOT NULL,
 `maximum_value` bigint(21) NOT NULL,
 `start_value` bigint(21) NOT NULL,
 `increment` bigint(21) NOT NULL,
 `cache_size` bigint(21) unsigned NOT NULL,
 `cycle_option` tinyint(1) unsigned NOT NULL,
 `cycle_count` bigint(21) NOT NULL 

Теперь давайте прикрепим его к таблицам

ALTER TABLE horror_movies ALTER COLUMN id SET DEFAULT next value for primary_key_seq;
ALTER TABLE comedy_movies ALTER COLUMN id SET DEFAULT next value for primary_key_seq;

Это гарантирует отсутствие дубликатов в первичном ключе по столбцам. Теперь, если вы вставите

INSERT INTO horror_movies(title)
 VALUES (‘Horror’);
INSERT INTO comedy_movies(title)
 VALUES (‘Comedy);

Это сделает стол

Заключение

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