Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен БД.docx
Скачиваний:
7
Добавлен:
20.04.2019
Размер:
240.87 Кб
Скачать

Последовательности

Последовательность (sequence) – это объект базы данных, используемый для автоматической генерации последовательности целых чисел. Чаще всего полученные целые числа, составляющие последовательность, используют при добавлении новых строк таблиц и присвоения значений идентификаторам, являющихся первичными ключами.

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

Описанной выше проблемы при использовании последовательностей не возникнет, поскольку каждый элемент последовательности доступен только одному пользователю.

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

Последовательности создаются при помощи оператора CREATE SEQUENCE, имеющей следующий синтаксис:

 

CREATE SEQUENCE имя_последовательности

[START WITH начальное_значение]

[INCREMENT BY приращение]

[MAXVALUE максимальное_значение | NOMAXVALUE]

[MINVALUE минимальное_значение | NOMINVALUE]

[CYCLE | NOCYCLE]

[CACHE размер_кэша | NOCACHE];

 

Все параметры последовательности имеют значения по умолчанию. Если не указывать ни один из перечисленных параметров, то последовательность начнется с 1, приращение будет равно 1, максимального и минимального значения не будет, последовательность не будет цикличной, и при генерации элементов не будет использоваться кэш. Например, следующая команда создает последовательность с параметрами по умолчанию, которую можно использовать для генерации номеров дилеров для столбца D_id таблицы DEALERS:

 

CREATE SEQUENCE Dealers_seq;

 

Последовательность может быть как возрастающей, так и убывающей, что задается положительным или отрицательным значением приращения. Если указано максимальное или минимальное значение последовательности, то по его достижении генерация новых элементов прекратится, либо начнется сначала, если был задан параметр CYCLE. В противном случае, при отсутствии параметра CYCLE, по достижении минимума или максимума последовательности СУБД будет генерировать сообщение об ошибке при попытке получение очередного ее элемента.

Опция CACHE команды CREATE SEQUENCE обеспечивает предварительную генерацию нескольких номеров последовательности и поддерживает их в памяти (кэширует), так что доступ к ним ускоряется. Когда использован последний из номеров в кэше, ORACLE считывает в кэш очередную группу номеров.

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

Удаление последовательностей осуществляется с помощью команды DROP SEQUENCE. Например:

 

DROP SEQUENCE Dealers_seq;