Изменение таблиц. Добавление строки. Копирование строк из таблицы. Команда UPDATE, страница 2

Ограничение можно именовать, чтобы потом идентифицировать. Перед ограничением используется конструкция CONSTRAIN имя_ограничения. (MySQL не поддерживает это предложение для столбцов, но разрешает именовать ограничения таблицы.)

Значение NULL

Не относится ни к одному типу и может быть вставлено в любой столбец (в столбце строкового типа помещается значение NULL, а не строка ‘NULL’). Нельзя это значение отождествлять с 0 либо пустой строкой или пробелом. Смысл – значение неизвестно. Желательно избегать таких значений в таблицах.

Ограничение на значение NULL – ограничение столбца. Если в таблицу добавлена строка командой INSERT, но не задано значение столбца, СУБД подставит значение NULL, если не содержится явный запрет.

CREATE TABLE title_authors

(title_id              CHAR(3)             NOT NULL,

au_id                CHAR(3)              NOT NULL,

au_order           SMALLINT          NOT NULL,

royalty_share    DECIMAL(5,2));

Все столбцы, для которых задано ограничение PRIMERY KEY, не должны содержать значение NULL. Поиск значений NULL осуществляется с помощью выражения IS NULL.

Примечание. Oracle опознает пустую строку как NULL.

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

Ограничение задается конструкцией DEFAULT <выражение> и является ограничением столбца. Результат выражения – константа, того же типа, что и столбец. Если при выполнении команды INSERT значение столбца не задано, используется значение по умолчанию. Если указано ограничение NOT NULL, но в команде INSERT значение явно не назначено, возникает ошибка, о которой выдается сообщение. Некоторые СУБД в этих случаях поступают в зависимости от типа данных (подбирают инвариантное значение, например 0).

CREATE TABLE title_authors

(title_id              CHAR(3)               NOT NULL,

au_id                CHAR(3)                NOT NULL,

au_order           SMALLINT           NOT NULL,

royalty_share    DECIMAL(5,2)     DEFAULT 1.0 NOT NULL);

Примечание. Oracle не поддерживает CONSTRAIN (именование ограничения) для ограничений типа DEFAULT.

Задание первичного ключа

Первичный ключ – столбец или несколько столбцов, идентифицирующих строки таблицы. Простой ключ состоит из одного столбца, сложный – из нескольких. Таблица может иметь несколько комбинаций столбцов, которые идентифицирует ее строки, - потенциальные ключи. Одна из них выбирается как первичный ключ. Простой ключ определяться как ограничение столбца, так и таблицы, сложный – как ограничение таблицы. Ключ задается в команде CREATE TABLE предложением PRIMERY KEY. Для задания имени ключа применяется предложение CONSRAINT. Для столбцов первичного ключа должно выполняться ограничение NOT NULL (оно задается автоматически, Oracle воспринимает пустую строку как NULL). Если при выполнении команды INSERT не заданы значения столбцов первичного ключа, они будут сформированы автоматически в соответствии с типом данных столбца.

Не рекомендуется изменять значения первичного ключа посредством команды UPDATE, а также использовать значение ключа удаленной посредством команды DELETE строки. SQL позволяет не определять первичный ключ для некоторой таблицы, однако рекомендуется задавать первичный ключ для каждой таблицы.

Первичный ключ можно задать несколькими способами.

1) CREATE TABLE publishers

(pub_id              CHAR(3)                PRIMERY KEY,

pub_name          VARCHAR(20)    NOT NULL,

city                     VARCHAR(15)    NOT NULL,

state                   CHAR(3)               NULL,

country              VARCHAR(15)    NOT NULL);

2) CREATE TABLE publishers

(pub_id              CHAR(3)                NOT NULL,

pub_name          VARCHAR(20)    NOT NULL,

city                     VARCHAR(15)    NOT NULL,

state                   CHAR(3)               NULL,

country              VARCHAR(15)    NOT NULL,

PRIMERY KEY (pub_id) );

3) CREATE TABLE publishers