- •Лабораторная работа №2 Создание таблиц, представлений.
- •Вычисляемые столбцы
- •Значения по умолчанию
- •Параметр not null
- •Ограничения столбцов
- •Ограничения check в доменах
- •Порядок сортировки collate
- •Удаление таблиц
- •Модификация таблицы
- •Представления
- •Изменяемые представления
- •Модификация представления
Значения по умолчанию
Значения столбцов по умолчанию задаются необязательным параметром DEFAULT:
[DEFAULT {<литерал> | NULL | USER}]
Если вы задали этот параметр, то указанное значение будет подставляться в столбец автоматически, если пользователь не введет в него другого значения. Здесь:
<литерал> - заданный по умолчанию символ или текст, целое или вещественное число, дата и (или) время, в зависимости от типа столбца. Применяется соответственно с текстовыми, числовыми полями и полями с датами. Значение даты указывается в кавычках. В примере ниже мы создаем логическое поле, которое должно содержать один из двух символов: Y (истина) или N (ложь). По умолчанию, в поле должен помещаться символ N. Кроме того, мы создаем числовое поле, которое по умолчанию "обнуляем", а также поле дат, которое по умолчанию будет содержать дату 1 Января 2010 года. Вот как можно этого добиться:
CREATE TABLE MyDefault(
Bool_col CHAR(1) DEFAULT 'N',
Int_col INTEGER DEFAULT 0,
Date_col DATE DEFAULT '01.01.2010' )
NULL - пустое значение в столбце. Когда вы добавляете в таблицу запись, все ее поля автоматически принимают значение Null, поэтому данный атрибут можно и не использовать.
USER - очень интересный и в высшей степени полезный атрибут, который хранит имя текущего пользователя. В многопользовательских базах данных нередко возникают ситуации, когда кто-то из пользователей ввел неправильные значения, в результате чего вся база стала содержать ошибочные данные. Ошибку, конечно, можно найти и исправить, но как найти виновника? Здесь очень пригодится атрибут USER. Вот как можно реализовать таблицу, которая автоматически сохраняет в каждой записи имя пользователя, который эту запись редактирует:
CREATE TABLE UsersTable(
ID INTEGER,
ZAPIS VARCHAR(50),
LOG_USERS VARCHAR(10) DEFAULT USER)
В данном примере не имеет значения, какие столбцы используются в записи. Самое главное, что в последний столбец автоматически будет вводиться ответственное за редактирование записи лицо, так что в случае ошибки долго искать виновника не придется. Такие поля, как правило, предназначены только для программиста или администратора базы данных, так что в клиентских приложениях их скрывают.
Параметр not null
Параметр NOT NULL указывает, что столбец не должен быть пустым. В случае если вы попытаетесь сохранить запись с таким столбцом, не введя в него какого-нибудь значения, произойдет ошибка, и InterBase не позволит сохранить такую запись. Если вы описываете поле, которое будет ключевым, указание такого параметра является обязательным. Пример:
CREATE TABLE Key_col(
ID INTEGER NOT NULL)
Ограничения столбцов
Ограничение на значение столбцов используется для проверки достоверности вводимых данных и подразумевает, что пользователь не сможет ввести в столбец значение, не удовлетворяющее указанному условию. При попытке редактирования столбца с ограничением, InterBase будет автоматически отслеживать вводимое значение, и отвергать те из них, которые нарушают заданное ограничение. Ограничения накладываются оператором CHECK, которое имеет следующий формат:
CHECK (<условие_поиска>);
где <условие_поиска> =
<значение> <оператор> {<значение1> | <выбор_одного>}
| <значение> [NOT] BEETWEN <значение1> AND <значение2>
| <значение> [NOT] LIKE <маска> [ESCAPE <символ>]
| <значение> [NOT] IN (<значение1> [, <значение2> ...])
| <список_выбора>
| <значение> IS [NOT] NULL
| <значение> {[NOT] {= | < | >} | >= | <=}
{ALL | SOME | ANY} {список_выбора}
| EXISTS (<выражение_выбора>)
| SINGULAR (<выражение_выбора>)
| <значение> [NOT] CONSTAINING <значение1>
| <значение> [NOT] STARTING [WITH] <строка>
| NOT <условие_поиска>
| <условие_поиска> OR <условие_поиска>
| <условие_поиска> AND <условие_поиска>
Напомним, что символом "|" в описании синтаксиса языков программирования принято разделять альтернативные значения. То есть, "|" смело можно заменить на "или". А в квадратные скобки заключаются необязательные параметры.
Диапазон возможностей оператора CHECK весьма широк - теоретически в нем можно указать почти любое условие поиска. В ограничениях можно сравнивать вводимое значение с другим указанным значением, со значением другого столбца или даже другого столбца другой таблицы. Кроме того, в качестве сравниваемого значения можно использовать выборку операторомSELECT из другой таблицы. Практически все параметры отвечают стандартам языка SQL и могут встречаться в операторах SELECT. Приведем несколько примеров:
CREATE TABLE Check_table(
/*Столбец должен содержать только положительные числа или ноль:*/
Col_1 INT CHECK (Col_1 >= 0),
/*Столбец должен содержать значение в диапазоне от 10 до 50:*/
Col_2 INT CHECK (Col_2 BETWEEN 10 AND 50),
/*Столбец должен оканчиваться символами "руб."*/
Col_3 VARCHAR(20) CHECK (Col_3 LIKE '% руб.'),
/*Столбец должен содержать либо "муж", либо "жен".*/
Col_4 VARCHAR(3) CHECK(Col_4 IN ('муж','жен')),
/*Столбец не может быть пустым.*/
Col_5 VARCHAR(5) CHECK (Col_5 IS NOT NULL),
/*Столбец 6 не может иметь такое же значение, как столбец 2*/
Col_6 INT CHECK (NOT Col_6 = Col_2),
/* Значение столбца 7 должно совпадать с одним или несколькими из */
/* значений столбца DLINNOE таблицы Table_cel*/
Col_7 INT CHECK (EXISTS(SELECT DLINNOE FROM Table_cel
WHERE Table_cel.DLINNOE = Check_table.Col_7)),
/* Значение столбца 8 должно совпадать лишь с одним из */
/* значений столбца DLINNOE таблицы Table_cel*/
Col_8 INT CHECK (SINGULAR(SELECT DLINNOE FROM Table_cel
WHERE Table_cel.DLINNOE = Check_table.Col_8)),
/*Столбец обязательно должен содержать подстроку "мир".*/
/*Например, "Мы за мир!", */
/*"мировая экономика", "эмират"*/
Col_9 VARCHAR(30) CHECK ( Col_9 CONTAINING 'мир'),
/*Столбец обязательно должен начинаться с подстроки "мир".*/
/*Например, "мировая экономика", "мираж", */
/*"мир в объективе"*/
Col_10 VARCHAR(30) CHECK ( Col_10 STARTING WITH 'мир')
)
Комментарии достаточно подробны, чтобы вы смогли разобраться с параметрами ограничений. В приведенном примере присутствуют практически все ограничения, которые могут понадобиться в реальном программировании. Ограничения могут присутствовать не только в столбцах, но и в таблицах. Позднее мы подробно их разберем.
