- •Введение в модель данных sql
- •1. Лекция: Язык баз данных sql: общее введение, типы данных и средства определения доменов Введение
- •Краткая история языка sql
- •Структура языка sql
- •Типы данных sql
- •Tочные числовые типы
- •Истинно целые типы
- •Точные типы, допускающие наличие дробной части
- •Приближенные числовые типы
- •Типы символьных строк
- •Типы битовых строк
- •Типы даты и времени
- •Тип даты
- •Типы времени
- •Типы временной метки
- •Типы времени и временной метки с временной зоной
- •Типы временных интервалов
- •Булевский тип
- •Типы коллекций
- •Типы массивов
- •Типы мультимножеств
- •Анонимные строчные типы
- •Типы, определяемые пользователем
- •Ссылочные типы
- •Средства определения, изменения определения и отмены определения доменов
- •Определение домена
- •Примеры определений доменов
- •Изменение определения домена
- •Примеры изменения определения домена
- •Отмена определения домена
- •Неявные и явные преобразования типа или домена
- •Неявные преобразования типов в sql
- •Явные преобразования типов или доменов и оператор cast
- •Заключение
- •2. Лекция: Язык баз данных sql: средства определения базовых таблиц и ограничений целостности
- •Введение
- •Средства определения, изменения и ликвидации базовых таблиц
- •Определение базовой таблицы
- •Определение столбца
- •Значения столбца по умолчанию
- •Ограничения целостности столбца
- •Определение табличного ограничения
- •Табличное ограничение первичного или возможного ключа
- •Проверочное табличное ограничение
- •Табличное ограничение внешнего ключа
- •Разновидности способов сопоставления значений внешнего и возможного ключей
- •Поддержка ссылочной целостности и ссылочные действия
- •Примеры определений базовых таблиц
- •Изменение определения базовой таблицы
- •Добавление, изменение или удаление определения столбца
- •Примеры изменения определения столбца
- •Изменение набора табличных ограничений
- •Примеры изменения набора табличных ограничений
- •Отмена определения (уничтожение) базовой таблицы
- •Средства определения и отмены общих ограничений целостности
- •Определение общих ограничений целостности
- •Отмена определения общего ограничения целостности
- •Немедленная и откладываемая проверка ограничений
- •Заключение
- •3. Лекция: Язык баз данных sql: общая характеристика оператора select и организация списка ссылок на таблицы в разделе from
- •4. Лекция: Язык баз данных sql: предикаты раздела where оператора select
- •Предикат сравнения
- •Примеры запросов с использованием предиката сравнения
- •Предикат between
- •Примеры запросов с использованием предиката between
- •Предикат null
- •Примеры запросов с использованием предиката null
- •Предикат in
- •Примеры запросов с использованием предиката in
- •Предикат like
- •Примеры запросов с использованием предиката like
- •Предикат similar
- •Примеры запросов с использованием предиката similar
- •Предикат exists
- •Примеры запросов с использованием предиката exists
- •Предикат unique
- •Примеры запросов с использованием предиката unique
- •Предикат overlaps
- •Примеры запросов с использованием предиката overlaps
- •Предикат сравнения с квантором
- •Примеры запросов с использованием предиката сравнения с квантором
- •Предикат match
- •Примеры запросов с использованием предиката match
- •Предикат distinct
- •Примеры запросов с использованием предиката distinct
- •Заключение
- •5. Лекция: Язык баз данных sql: группировка и условия раздела having, порождаемые и соединенные таблицы
- •Логические выражения раздела having
- •Предикаты сравнения
- •Предикат between
- •Предикат null
- •Предикат in
- •Предикат like
- •Предикат exists
- •Предикат unique
- •Предикаты сравнения с квантором
- •Предикат distinct
- •Более сложные конструкции оператора выборки
- •Соединенные таблицы
- •Формальные определения
- •Примеры соединений разного вида
- •Примеры запросов с использованием соединенных таблиц
- •6. Лекция: Язык баз данных sql: средства формулировки аналитических и рекурсивных запросов
- •Возможности формулирования аналитических запросов
- •Раздел group by rollup
- •Агрегатная функция grouping
- •Раздел group by cube
- •Рекурсивные запросы
- •Определения, относящиеся к рекурсии
- •Рекурсивные запросы с разделом with
- •Раздел search
- •Раздел cyrcle
- •Рекурсивные представления
- •Заключение
- •7. Лекция: Язык баз данных sql: средства манипулирования данными
- •Введение
- •Базовые средства манипулирования данными
- •Оператор insert для вставки строк в существующие таблицы
- •Вставка всех строк указанной таблицы
- •Вставка явно заданного набора строк
- •Вставка строк результата запроса
- •Оператор update для модификации существующих строк в существующих таблицах
- •Оператор delete для удаления строк в существующих таблицах
- •Представления, над которыми возможны операции обновления
- •Представления, допускающие применение операций обновления, в стандарте sql/92
- •Представления, допускающие применение операций обновления, в стандарте sql:1999
- •Критерии применимости операций обновления
- •Правила функциональных зависимостей
- •Раздел with check option определения представления
- •Режимы проверки cascaded и local
- •Примеры результатов действия раздела with check option
- •Исторический очерк
Средства определения, изменения и ликвидации базовых таблиц
Базовые(реально хранимые в базе данных) таблицы создаются (определяются) с использованием оператора CREATE TABLE. Для изменения определения базовой таблицы применяется оператор ALTER TABLE. Уничтожить хранимую таблицу (отменить ее определение) можно с помощью оператора DROP TABLE.
Замечание: хотя внешне операторы CREATE TABLE, ALTER TABLE и DROP TABLE похожи на соответствующие операторы определения, изменения определения и отмены определения домена, между ними имеется принципиальное различие. Определение домена приводит всего лишь к созданию некоторых новых описателей, входящих в состав метаданных базы данных. Создание базовой таблицы, кроме создания соответствующих описателей, порождает новую область внешней памяти, в которой будут храниться данные, поставляемые пользователями. Тем самым, базовая таблица SQL-ориентированной базы данных является прямым аналогом переменной отношения реляционной модели данных.
Определение базовой таблицы
Оператор создания базовой таблицы CREATE TABLE имеет следующий синтаксис:
base_table_definition ::= CREATE TABLE base_table_name (base_table_element_commalist) 2)
base_table_element ::= column_definition | base_table_constraint_definition
Здесь base_table_name задает имя новой (изначально пустой) базовой таблицы. Каждый элемент определения базовой таблицы является либо определением столбца, либо определением табличного ограничения целостности.
Определение столбца
Элемент определения столбца специфицируется на основе следующих синтаксических правил:
column_definition ::= column_name
{ data_type | domain_name }
[ default_definition ]
[ column_constraint_definition_list ]
В элементе определения столбца column_name задает имя определяемого столбца. Тип столбца специфицируется путем явного указания типа данных (data_type) или путем указания имени ранее определенного домена (domain_name).
Значения столбца по умолчанию
Необязательный раздел определения значения столбца по умолчанию имеет тот же синтаксис, что и раздел определения значения по умолчанию в операторах определения или изменения определения домена:
DEFAULT { literal | niladic_function | NULL }
Действующее значение по умолчанию для данного столбца определяется следующим образом:
если в определении столбца явно присутствует раздел DEFAULT, то значением столбца по умолчанию является значение, указанное в этом разделе;
иначе, если столбец определяется на домене и в определении этого домена явно присутствует раздел DEFAULT, то значением столбца по умолчанию является значение, указанное в этом разделе;
иначе значением по умолчанию столбца является NULL.3)
Заметим, что если значением по умолчанию неявно объявлено неопределенное значение (NULL), но среди ограничений целостности столбца присутствует ограничение NOT NULL (см. ниже), то считается, что у столбца вообще отсутствует значение по умолчанию. Это означает, что при любой вставке новой строки в соответствующую базовую таблицу значение данного столбца должно быть задано явно.
Ограничения целостности столбца
Элемент необязательного списка ограничений целостности столбца определяется следующими синтаксическими правилами:
column_constraint_definition ::=
[ CONSTRAINT constraint_name ]
NOT NULL
| { PRIMARY KEY | UNIQUE }
| references_definition
| CHECK ( conditional_expression )
Как мы увидим немного позже, любое ограничение целостности, включаемое в определение столбца, может быть эквивалентным образом выражено в виде табличного ограничения целостности. Единственный резон определения ограничений на уровне столбца состоит в том, что в этом случае в ограничении целостности не требуется явно указывать имя столбца. Тем не менее, кратко рассмотрим ограничения целостности столбца отдельно.
Ограничение NOT NULL означает, что в определяемом столбце никогда не должны содержаться неопределенные значения. Если определяемый столбец имеет имя C, то это ограничение эквивалентно следующему табличному ограничению: CHECK (C IS NOT NULL).
В определение столбца может входить одно из ограничений: ограничение первичного ключа (PRIMARY KEY) или ограничение возможного ключа (UNIQUE). Включение в определение столбца любого из этих ограничений означает требование уникальности значений определяемого столбца (т. е. во все время существования определяемой таблицы во всех ее строках значения данного столбца должны быть различны4)). Ограничение PRIMARY KEY, в дополнение к этому, влечет за собой ограничение NOT NULL для определяемого столбца. Эти ограничения столбца эквивалентны следующим табличным ограничениям: PRIMARY KEY (C) и UNIQUE (С).
Ограничение references_definition означает объявление определяемого столбца внешним ключом таблицы и обладает следующим синтаксисом:
references_definition ::=
REFERENCES base_table_name [ (column_commalist) ]
[ MATCH { SIMPLE | FULL | PARTIAL } ]
[ ON DELETE referential_action ]
[ ON UPDATE referential_action ]
На самом деле, данная синтаксическая конструкция работает и в случае определения внешнего ключа на уровне таблицы (в одном из определений табличных ограничений целостности). Поэтому мы отложим обсуждение до рассмотрения этого общего случая. Пока отметим только, что при использовании конструкции на уровне определения столбца column_commalist может содержать имя только одного столбца (потому что внешний ключ состоит из одного определяемого столбца). Ограничение эквивалентно следующему табличному ограничению: FOREIGN KEY (C) references_definition.
Проверочное ограничение CHECK (conditional_expression) приводит к тому, что в данном столбце могут находиться только те значения, для которых вычисление conditional_expression не приводит к результату false. В условном выражении проверочного ограничения столбца разрешается использовать имя только определяемого столбца. Заметим, что проверочное ограничение столбца может быть безо всяких изменений перенесено на уровень определения табличных ограничений.
