
- •Введение
- •Прочие команды
- •Структура базы данных
- •Ключи, ограничения
- •Индексы
- •Представления
- •Процедуры и функции
- •Триггеры
- •Пользователи и сессии
- •Инструментарий скачать субд
- •Инсталляция
- •Выполнение запросов
- •Использование примеров
- •Комментарий
- •Идентификаторы
- •Обзор типов данных
- •Интервал времени
- •Литералы
- •Выражения и операции
- •Строковые операции
- •Алгебраические операции
- •Операции отношения
- •Логические операции и предикаты
- •Условные выражения
- •Прочие операции
- •Обзор функций
- •Математические функции
- •Строковые функции
- •Работа с датами
- •Преобразование типов
- •Функции Oracle
- •Функции PostgreSql
- •Функции MySql
- •Создание таблицы
- •Значения полей по умолчанию
- •Ключи и ограничения
- •Настройка внешнего ключа
- •Создание по выборке
- •Дополнительные параметры таблицы
- •Изменение, удаление таблицы
- •Переименование таблицы или ее столбца
- •Добавление/удаление столбца
- •Первичный ключ
- •Уникальный ключ
- •Внешний ключ
- •Безошибочное удаление таблиц
- •Добавление записей
- •Значения по умолчанию
- •Подзапросы
- •Вставка по условию
- •Обновление записей
- •Обновление подзапросом
- •Обновление по данным другой таблицы
- •Удаление записей
- •Выборка записей
- •Выборка констант
- •Выборка по столбцам таблиц
- •Синонимы (алиасы)
- •Уникальные записи
- •Выборка по условию
- •Выборка по группам
- •Соединения
- •Агрегатные функции, группировка данных
- •Операции над выборками
- •Добавление итогов
- •Нумерация записей
- •Обеспечение уникальности первичного ключа
- •Столбцы с автоинкрементом
- •Индексы
- •Представления
- •Динамический sql (dsql)
- •Процедурные операторы блоковая структура кода
- •Присвоение
- •Условный оператор
- •Оператор выбора
- •Безусловный цикл
- •Цикл с предусловием
- •Цикл по счетчику
- •Цикл по элементам
- •Операторы выхода/продолжения итерации
- •Выборка в переменные
- •Хранимые процедуры
- •Вызов процедур
- •Исключения
- •Курсоры
- •Триггеры
- •Числа прописью
- •Транзакции, конкурирующие запросы
- •Управление аккаунтами пользователи
- •Права доступа
- •Права доступа MySql
- •Права доступа PostgreSql
- •Права доступа Oracle
- •Удаление прав доступа
- •Роли PostgreSql
- •Роли Oracle
- •Роли MySql
- •Файловый вывод/ввод
- •Информация о базе данных
Индексы
Индексы служат для сортировки таблиц по указанным столбцам. Они существенно ускоряют работу с большими данными. Ниже приведен минимальный синтаксис создания индекса.
-- пусть есть некая таблица tblname
-- со столбцом tblcol
create table tblname(
...
tblcol date;
...
);
-- создаем индекс ind_tblname_d для этой таблицы
CREATE INDEX ind_tblname_d ON tblname (tblcol);
В большинстве СУБД позволяется индексация по нескольким столбцам. Первичные и уникальные ключи обычно индексируются автоматически.
Представления
Представления позволяют сохранить код выборки в базе данных. После этого имя представления используется в других выборках также как и имя обычной таблицы. Таким образом, упрощается написание новых запросов. Для конкретности примера, пусть существуют следующие таблицы с данными.
-- создаем первую таблицу
create table dicevents(
id integer,
s varchar(45),
constraint pk_dicevents primary key(id)
);
-- вставка данных
insert into dicevents
values(1,'пожар');
insert into dicevents
values(2,'авария');
insert into dicevents
values(3,'взрыв газа');
-- создаем вторую таблицу
create table evt(
id integer,
d date,
summ double precision,
evtname integer,
constraint pk_evt primary key(id),
constraint fk_evt foreign key(evtname)
references dicevents(id)
);
-- вставка данных
insert into evt
values(1,date '2008-01-02',102000,1);
insert into evt
values(2,date '2007-12-31',67000,3);
insert into evt
values(3,date '2008-01-05',32020.3,2);
insert into evt
values(4,date '2008-01-06',99000,null);
Для создания представлений используется команда CREATE VIEW. По желанию в команду можно включить OR REPLACE. В этом случае новое представление заменит старое, если оно существует. Ниже приведены примеры создания представления на соединение наших таблиц.
CREATE OR REPLACE VIEW evtlst
AS -- далее следует запрос
select t.d as "дата",
dt.s as "событие",
t.summ as "ущерб"
from evt t left join dicevents dt on (t.evtname=dt.id)
order by t.d;
-- названия столбцов можно задать после
-- имени представления
-- в MySQL двойные кавычки возможны
-- только в режиме ANSI SQL
CREATE OR REPLACE VIEW evtlst
("дата","событие","ущерб")
as
select t.d, dt.s, t.summ
from evt t left join dicevents dt on (t.evtname=dt.id)
order by t.d;
Выборка из представления не отличается от выборки из обычной таблицы.
-- выборка из представления
select * from evtlist;
Для уничтожения представления используется команда DROP VIEW. Некоторые СУБД поддерживают расширенный синтаксис с IF EXISTS, позволяющий избежать ошибки, если уничтожаемого представления не существует.
-- уничтожение представления
DROP VIEW eventlist;
-- уничтожение представления, если оно
-- существует
DROP VIEW IF EXISTS eventlist;
Динамический sql (dsql)
Динамический SQL это расширение, позволяющее писать подпрограммы на процедурном языке с использованием команд SQL. PostgreSQL поддерживает несколько процедурных языков как PL/Tcl и PL/Perl. Здесь же рассматривается PL/pgSQL, который очень близок по синтаксису и своим возможностям с Oracle PL/SQL. Процедурный язык в MySQL более ограничен и находится на стадии разработки.
Для использования языка PL/pgSQL, его надо установить в БД командой CREATE LANGUAGE plpgsql;