Создание последовательности
Последовательности создаются командой SQL CREATE SEQUENCE с положительным или отрицательным приращением. Синтаксис команды CREATE SEQUENCE:
CREATE SEQUENCE последовательность
[INCREMENT приращение]
[MINVALUE минимум]
[MAXVALUE максимум]
[START начало]
[CACHE кэш]
[CYCLE]
В этом определении единственный обязательный параметр последовательностиопределяет имя создаваемой последовательности. Значения последовательности представляются типом integer, поэтому максимальное и минимальное значения должны лежать в интервале от 2 147 483 647 до -2 147 483 647.
Ниже описаны необязательные секции команды CREATE SEQUENCE.
• INCREMENT приращение. Числовое изменение текущего значения последовательности. Используется при вызове для последовательности функции nextval(). Отрицательное приращение создает убывающую последовательность. По умолчанию приращение равно 1.
• MINVALUE минимум. Минимальное допустимое значение последовательности. Попытка уменьшить текущее значение ниже заданного минимума приведет к ошибке или циклическому переходу к максимальному значению (если последовательность создавалась с ключевым словом CYCLE). По умолчанию минимальное значение равно 1 для возрастающих последовательностей или -2 147 483 647 для убывающих последовательностей.
• MAXVALUE максимум. Максимальное допустимое значение последовательности. Попытка увеличить текущее значение выше заданного максимума приведет к ошибке или циклическому переходу к минимальному значению. По умолчанию максимальное значение равно 2 147 483 647 для возрастающих последовательностей или -1 для убывающих последовательностей.
• START начало. Начальное значение последовательности, которым является любое целое число в интервале между минимальным и максимальным значениями. По умолчанию последовательность начинается с нижнего порога для возрастающих последовательностей или с верхнего порога для убывающих последовательностей.
• CACHE кэш. Возможность предварительного вычисления и хранения значений последовательности в памяти. Кэширование ускоряет доступ к часто используемым последовательностям. Минимальное значение, заданное по умолчанию, равно 1; увеличение объема кэша приводит к увеличению числа кэшируемых значений.
• CYCLE. При достижении нижнего или верхнего порога последовательность продолжает генерировать новые значения. В этом случае она переходит к минимальному значению (для возрастающих последовательностей) или к максимальному значению (для убывающих последовательностей).
Если вы добавляете новые данные и при этом сами указываете значение последовательности, то значение соответствующей последовательности остается прежним. Таким образом, при следующем добавлении данных в таблицу может возникнуть ошибка.
Создадим последовательности для наших таблиц:
CREATE SEQUENCE zakazy.clienty_id_cln_seq;
ALTER TABLE zakazy.clienty
ALTER COLUMN id_cln
SET DEFAULT nextval('zakazy.clienty_id_cln_seq');
CREATE SEQUENCE zakazy.offisy_id_ofc_seq;
ALTER TABLE zakazy.offisy
ALTER COLUMN id_ofc
SET DEFAULT nextval('zakazy.offisy_id_ofc_seq');
CREATE SEQUENCE zakazy.sluzhaschie_id_slzh_seq;
ALTER TABLE zakazy.sluzhaschie
ALTER COLUMN id_slzh
SET DEFAULT nextval('zakazy.sluzhaschie_id_slzh_seq');
CREATE SEQUENCE zakazy.zakazy_id_order_seq;
ALTER TABLE zakazy.zakazy
ALTER COLUMN id_order
SET DEFAULT nextval('zakazy.zakazy_id_order_seq');
Операции с последовательностями
Выборка атрибутов последовательности требуется относительно редко. Как правило, все операции с последовательностями выполняются при помощи трех специальных функций PostgreSQL.
• nextval('последовательность'). Увеличивает текущее значение заданной последовательности и возвращает новое значение в виде величины типа integer.
Например: SELECT nextval('zakazy.clienty_id_cln_seq')
• currval('последовательность'). Возвращает значение, полученное при последнем вызове nextval(). Значение ассоциируется с определенным сеансом PostgreSQL, поэтому если функция nextval() еще не вызывалась для заданного подключения в текущем сеансе, функция не сможет вернуть значение.
• setval('последовательность'.n). Присваивает число nтекущему значению заданной последовательности. Следующий вызов nextval() возвращает значение n+приращение, где приращение-- изменение текущего значения последовательности при каждой итерации.
• setval('последовательность'. n. b). Также присваивает число n текущему значению заданной последовательности. Если параметр b(тип Boolean) равен false, то следующий вызов nextval () вернет значение n, а если параметр равен true, то будет возвращено значение n+приращение, как при вызове функции setval() без дополнительного аргумента.
Удаление последовательности
Команда SQL DROP SEQUENCE удаляет последовательность или несколько последовательностей одновременно. Синтаксис команды
DROP SEQUENCE: DROP SEQUENCE последовательность [. ...]
В качестве параметра команде передается имя удаляемой последовательности. Допускается одновременное удаление нескольких последовательностей, перечисленных через запятую.
Прежде чем уничтожать последовательность, убедитесь в том, что она не используется другой таблицей, функцией или другим объектом базы данных. Если забыть об этой проверке, это нарушит работу других операций, зависящих от данной последовательности.
Например, удалим последовательность zakazy.clienty_id_cln_seq:
ALTER TABLE zakazy.clienty
ALTER COLUMN id_cln DROP DEFAULT;
DROP SEQUENCE zakazy.clienty_id_cln_seq;
Индексы
Индексомназывается объект базы данных, позволяющий значительно повысить скорость обращения к базе за счет ускоренной обработки команд, содержащих сравнительные критерии. Хранимая в индексах информация о размещении данных по одному или нескольким полям таблицы повышает эффективность поиска записей при условной выборке (например, с использованием секции WHERE).
Индексы ускоряют доступ к базе, но они также сопряжены с дополнительными затратами ресурсов. При изменении данных в поле индекс приходится обновлять, поэтому поддержание редко используемых индексов отрицательно сказывается на быстродействии системы (затраты времени на поддержание индексов превышают экономию от их использования). Как правило, индексы определяются только для полей, часто указываемых в условиях поиска.
Создание индекса
Для создания индексов в SQL предусмотрен оператор CREATE INDEX:
CREATE UNIQUE INDEX имя_индекса
ON имя_таблицы (поле1, поле2, ... , полеN)
Ключевое слово UNIQUE необязательное, но оно используется для создания индексов с уникальностью значений в индексируемых столбцах. Установка некоторых типов ограничений на столбцы (прежде всего ограничения PRIMARY KEY и UNIQUE) также приводит к автоматическому построению индекса.
Например.
Поскольку чаще всего товар ищется по его наименованию, а не по первичному ключу, поэтому создадим следующий индекс:
CREATE INDEX index_descript
ON zakazy.tovary (description)
Удаление индекса
Для удаления индекса из базы данных используется оператор:
DROP INDEX имя_индекса
Системные индексы, создаваемые автоматически для полей с атрибутами UNIQUE, а также для ключевых полей, удалить с помощью оператора DROP INDEX невозможно.
1.3. Работа с таблицами
С созданными таблицами можно выполнить следующие операции:
– добавлять новые строки с помощью оператора INSERT INTO;
– обновлять существующие строки с помощью оператора UPDATE;
– удалять строки из таблиц с помощью оператора DELETE FROM;
– произвести выборку данных из таблиц с помощью оператора SELECT;
– создавать хранимые запросы или представления с помощью оператора CREATE VIEW.
Изменение данных в таблице
Оператор INSERT INTO
Для добавления одной строки в таблицу используется SQL-оператор:
INSERT INTO имя_таблицы (список_полей)
VALUES (список_значений)
Если порядок следования значений в точности соответствует очередности полей в таблице, то используется оператор
INSERT INTO имя_таблицы
VALUES (список_значений)
Для примера добавим данные в таблицу offisy:
INSERT INTO zakazy.offisy
VALUES (1,'Инза','Ульяновская', 2108, 300000.00, 186042.00);
INSERT INTO zakazy.offisy
VALUES (2,'Буинск','Татарстан', 2106, 575000.00, 692637.00);
INSERT INTO zakazy.offisy
VALUES (3,'Тверь', 'Московская', 2104, 800000.00, 735042.00);
INSERT INTO zakazy.offisy
VALUES (4,'Орел', 'Орловская', 2105, 350000.00, 367911.00);
INSERT INTO zakazy.offisy
VALUES (5,'Киров','Кировская', 2108, 725000.00, 835915.00);
Результат выполнения приведенных запросов можно просмотреть нажатием кнопки «Просмотр данных в выбранном объекте» (см. Рис. 10).
Файл insert_data.sql содержит скрипты добавления данных во все таблицы БД zakazy.
Оператор UPDATE
Для изменения данных в таблице используется SQL-оператор:
UPDATE имя_таблицы
SET имя_столбца1 = новое_значение1
имя_столбца1 = новое_значение1
. . .
имя_столбца1 = новое_значение1
WHERE условие_отбора
При построении условий отбора могут использоваться те же конструкции, что и в операторе SELECT, которые будут рассмотрены ниже.
Рассмотрим пример применения оператора UPDATE. Предположим, что продажи в Кирове увеличились на 100000.
Для этого необходимо выполнить оператор:
UPDATE zakazy.offisy
SET sales = sales - 100000
WHERE city = 'Киров'
| Рис. 10. Дерево базы данных после выполнения запросов CREATE TABLE
|
Оператор DELETE
Для удаления строк из таблиц баз данных используется оператор DELETE FROM
DELETE FROM имя_таблицы
WHERE условие_отбора
Рассмотрим пример использования оператора DELETE FROM.
Допустим, что в связи, с экономическим кризисом, был расформирован офис в Кирове:
DELETE FROM zakazy.offisy
WHERE city = 'Киров'
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|