Проблема
Представьте, что у вас есть две таблицы, которые могут быть объединены в будущем, и вы автоматически увеличиваете их идентификатор в настоящее время.
Теперь, если вы объедините обе эти таблицы, произойдет столкновение. Как нам предотвратить это. Давайте поймем нашего спасителя здесь
Что такое последовательности?
Последовательность — это объект базы данных, который генерирует серию уникальных чисел в последовательном порядке. Он часто используется для автоматического создания значений первичного ключа для таблиц.
Думайте о последовательности как о счетчике, который отслеживает следующий номер, который будет назначен. Каждый раз, когда из последовательности запрашивается новое число, возвращается следующее доступное значение.
Последовательности имеют следующие характеристики:
- Последовательный порядок: значения последовательности генерируются в последовательном порядке, что означает, что каждое число больше предыдущего.
- Уникальные значения. Значения последовательности уникальны в пределах последовательности. Они обеспечивают надежный и гарантированный способ создания уникальных идентификаторов для записей базы данных.
- Шаг увеличения: последовательности имеют шаг увеличения, который определяет разницу между последовательными числами в последовательности. Например, последовательность с шагом приращения 1 будет генерировать такие значения, как 1, 2, 3, 4 и т. д.
- Независимость: последовательности не зависят от данных, хранящихся в таблицах. Они поддерживаются отдельно и могут использоваться для создания уникальных идентификаторов в нескольких таблицах.
- Сохранение. Значения последовательности сохраняются даже после перезапуска базы данных или сервера. Они сохраняют свое состояние и продолжают генерировать уникальные номера без пробелов.
Теперь, когда мы поняли последовательность, давайте используем последовательность для решения нашей проблемы
Создать последовательность
Команда создания последовательности выглядит следующим образом
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);
Это сделает стол
Заключение
Мы можем использовать последовательность, чтобы решить проблему совместного использования первичного ключа в таблице и поддерживать уникальность нескольких идентификаторов таблиц для минимизации конфликтов при слиянии в будущем.