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

Изменение последовательностей

В любой момент можно поменять любой из параметров последовательности, за исключением параметра START WITH, при помощи команды ALTER SEQUENCE. Например:

 

ALTER SEQUENCE Dealers_seq

INCREMENT BY 10

MAXVALUE 10000

CYCLE

CACHE 20;

.Использование последовательностей

Обращение к последовательности осуществляется в предложениях SQL через методы NEXTVAL и CURRVAL; каждый новый номер данной последовательности генерируется обращением к методу NEXTVAL, тогда как текущий номер последовательности можно извлекать неоднократно путем обращения к методу CURRVAL.

Например, используя созданную ранее последовательность Dealers_seq, можно при добавлении строки в таблицу DEALERS задать номер для идентификатора D_id:

 

INSERT INTO Dealers(D_id, Name, Procent)

VALUES (Dealers_seq.NEXTVAL, ‘Иванов В. И.’, 10);

 

Использование метода CURRVAL последовательности возможно только внутри одной транзакции с методом NEXTVAL. Это правило обусловлено необходимостью обеспечения целостности базы данных. Действительно, если представить, что существует последовательность, разделяемая между несколькими пользователями, то использование метода CURRVAL не будет ничем отличаться от использования запроса на получение максимального идентификатора. По этой причине текущее значение последовательности для каждого пользователя, воспользовавшегося одной и той же последовательностью, будет разным.

Чаще всего метод CURRVAL используется тогда, когда необходимо внутри одной транзакции добавить связанную по полю идентификатора информацию и в главную таблицу, и в зависимую, например:

 

-- добавление строки в главную таблицу

INSERT INTO Dealers(D_id, Name, Procent)

VALUES (Dealers_seq.NEXTVAL, ‘Иванов В. И.’, 10);

 

-- добавление строки в подчиненную таблицу

INSERT INTO Managers(Man_id, D_id, Name)

VALUES

(Managers_seq.NEXTVAL, Dealers_seq.CURRVAL, ‘Петров И.А.');

 

Методы последовательностей NEXTVAL и CURRVAL могут использоваться в следующих местах:

  • в фразе VALUES предложения INSERT;

  • в списке SELECT предложения SELECT;

  • в фразе SET предложения UPDATE.

Методы последовательностей NEXTVAL и CURRVAL не могут использоваться в следующих местах:

  • в подзапросе;

  • в запросе, определяющем представление;

  • в предложении SELECT с оператором DISTINCT;

  • в предложении SELECT с фразой GROUP BY или ORDER BY;

  • в предложении SELECT, скомбинированном с другим предложением SELECT одним из операторов множеств UNION, INTERSECT или MINUS;

  • в фразе WHERE предложения SELECT;

  • в выражении DEFAULT для столбца в предложении CREATE TABLE или ALTER TABLE;

  • в условии ограничения CHECK.

Оператор ввода новых строк insert Вставка единственной записи в таблицу

Любая новая информация попадает в базу данных посредством использования оператора INSERT. Для добавления информации о каждом новом объекте используется один оператор INSERT, имеющий следующий синтаксис:

 

INSERT INTO имя_таблицы[(список_атрибутов)]

VALUES (список_значений);

 

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

-- вставка строки в таблицу DEALERS с указанием всех

-- атрибутов:

INSERT INTO Dealers VALUES(1, ‘Иванов А.И.’, 3, null);

-- вставка строки в таблицу DEALERS с указанием некоторых

-- атрибутов в произвольном порядке

INSERT INTO Dealers(name, d_id, procent)

VALUES(‘Иванов А.И.’, 1, 3);