Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №2. Создание таблиц и предс...doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
301.06 Кб
Скачать

Значения по умолчанию

Значения столбцов по умолчанию задаются необязательным параметром 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 'мир')

)

Комментарии достаточно подробны, чтобы вы смогли разобраться с параметрами ограничений. В приведенном примере присутствуют практически все ограничения, которые могут понадобиться в реальном программировании. Ограничения могут присутствовать не только в столбцах, но и в таблицах. Позднее мы подробно их разберем.