Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛБ SQL 1.docx
Скачиваний:
0
Добавлен:
20.11.2019
Размер:
62.12 Кб
Скачать

1 Операторы определения объектов базы данных ddl

1.1 Операторы определения таблицы

1.1.1 CREATE TABLE

Базовые таблицы описываются в SQL с помощью предложения CREATE TABLE (создать таблицу). Рассмотрим синтаксис этого предложения:

CREATE TABLE <имя_таблицы> (<элемент_таблицы>

[,<элемент_таблицы >...] [ограничения_целостности_таблицы]);

< элемент_таблицы > ::= <определение_столбца>

< определение_столбца > ::= <имя_столбца> <тип_данных>

[DEFAULT <значение>] [<ограничения_ целостности_столбца>...]

< ограничения_ целостности_столбца > ::= NULL | NOT NULL [UNIQUE <спецификация>] | REFERENCES <спецификация> | CHECK (<проверочное_ограничение>)|PRIMARY KEY|FOREIGN KEY

Кроме имени таблицы, в операторе специфицируется список элементов таблицы, каждый из которых служит либо для определения столбца, либо для определения ограничения целостности определяемой таблицы. Требуется наличие хотя бы одного определения столбца. Для столбца задается имя и его тип данных, а также два необязательных раздела: раздел значения столбца по умолчанию и раздел ограничений целостности столбца.

Ограничение – это свойство, назначенное столбцу или таблице, которое запрещает ввод в указанный столбец (или столбцы) недопустимых значений. Основные виды ограничений: NULL, NOT NULL, DEFAULT, PRIMARY KEY, FOREIGN KEY, REFERENCES, CHECK, UNIQUE. Ограничения могут быть без имени или с именем, тогда перед ограничением вставляется слово CONSTRAINT <имя_ограничения>. Наличие имени ограничения позволяет ссылаться на него в операторе изменения таблицы, например:

ALTER TABLE Tab1 ADD CONSTRAINT col1 CHECK (col1 BETWEEN 0 AND 1);

В разделе значения по умолчанию DEFAULT указывается значение, которое должно быть помещено в строку, заносимую в данную таблицу, если значение данного столбца явно не указано. Значение по умолчанию может быть указано в виде литеральной константы с типом, соответствующим типу столбца, или путем задания ключевого слова NULL, означающего, что значением по умолчанию является неопределенное значение. Если значение столбца по умолчанию не специфицировано, и в разделе ограничений целостности столбца указано NOT NULL, то попытка занести в таблицу строку с NULL-значением данного столбца приведет к ошибке.

Указание в разделе ограничений целостности NOT NULL приводит к неявному порождению проверочного ограничения целостности для всей таблицы «CHECK (C IS NOT NULL)» (где C - имя данного столбца). Если ограничение NOT NULL не указано, и раздел умолчаний отсутствует, то неявно порождается раздел умолчаний DEFAULT NULL. Если указана спецификация уникальности, то порождается соответствующая спецификация уникальности для таблицы.

Если в разделе ограничений целостности указано ограничение по ссылкам данного столбца (REFERNECES <имя_мастер_таблицы> [<имя_столбца>] - эта конструкция определяет, что данный столбец является внешним ключом и указывает на ключ какой мастер_таблицы он ссылается. >), то порождается соответствующее определение ограничения по ссылкам для таблицы:

FOREIGN KEY(C) REFERENCES <спецификация>

Задание Создать таблицу:

CREATE TABLE Заказчики

( cnum integer NOT NULL PRIMARY KEY,

cname char (10) NOT NULL,

city char (10) DEFAULT = 'Лондон',

rating integer,

snum integer NOT NULL,

UNIQUE (cnum, snum));

UNIQUE (cnum, snum) – это ограничение целостности таблицы, утверждающее, что комбинация номеров должна быть уникальной, т.е. у каждого заказчика только один продавец.

Задание Создать таблицу с составным первичным ключом (используется ограничение целостности таблицы PRIMARY KEY для пар):

CREATE TABLE Имена

( firstname char (10) NOT NULL,

lastname char (10) NOT NULL

city char (10),

PRIMARY KEY ( firstname, lastname ));

Задание Создать таблицу с ограничением по ссылкам:

CREATE TABLE Продавцы

(snum integer NOT NULL PRIMARY KEY,

sname char(10) NOT NULL,

city char(10),

comm decimal,

cnum integer REFERENCES Customers);

1.1.3 DROP TABLE

Существующую базовую таблицу можно в любой момент уничтожить с помощью предложения:

DROP TABLE <имя_таблицы>;

по которому удаляется описание таблицы, ее данные, связанные с ней представления и индексы, построенные для столбцов таблицы.

Задание удалить таблицу Имена

1.1.4 CREATE INDEX

Для построения индекса в SQL существует предложение CREATE INDEX (создать индекс), имеющее формат:

CREATE [UNIQUE] INDEX <имя_индекса> ON < имя_таблицы >

(<столбец >[[ASC] | DESC] [, <столбец> [[ASC] | DESC]] ...);

где UNIQUE (уникальный) указывает, что никаким двум строкам в индексируемой базовой таблице не позволяется принимать одно и то же значение для индексируемого столбца (или комбинации столбцов) в одно и то же время.

Задание: столбец City из таблицы Продавцы сделать индексируемым

1.1.5 DROP INDEX

Для удаления индекса используется предложение:

DROP INDEX <имя_индекса>;

Замечание. Так как индексы могут создаваться или уничтожаться в любое время, то перед выполнением запросов целесообразно строить индексы лишь для тех столбцов, которые используются в WHERE и ORDER BY фразах запроса, а перед модификацией большого числа строк таблиц с индексированными столбцами эти индексы следует уничтожить.

Задание: удалить индекс столбца City из таблицы Продавцы

1.1.6 ALTER TABLE

Для изменения таблиц используется команда ALTER TABLE. Вид производимого изменения определятся последующими дополнительными командами:

1. Переименование таблицы осуществляется с помощью подкоманды RENAME. Например, чтобы переименовать таблицу "news" в "news_new", нужно выполнить следующую команду:

ALTER TABLE `news` RENAME TO `news_new`;

Задание Переименовать таблицы `Заказчики`,` Продавцы` в `1`,` 2` и обратно.

2. Для добавления нового атрибута в таблицу потребуется подкоманда ADD COLUMN, для которой нужно ввести название нового атрибута и указать его тип. Например, добавление к таблице "news" нового атрибута "author" (имя автора) будет выглядеть следующим образом:

ALTER TABLE `news` ADD COLUMN `author` VARCHAR(42);

Кроме того, можно задать положение добавляемого поля. Для этого в конец команды добавляется инструкция, указывающая, после какого столбца будет добавлено новое поле. Например, команда добавления атрибута "author" в таблицу "news" с тем, чтобы "author" стал вторым полем, выглядит следующим образом:

ALTER TABLE `news` ADD COLUMN `author` VARCHAR(42) AFTER `id`;

Чтобы поле стало первым в таблице, нужно заменить конструкцию с "AFTER ..." на ключевое слово "FIRST". Команда добавления атрибута "author" в таблицу "news" в качестве первого поля будет выглядеть так:

ALTER TABLE `news` ADD COLUMN `author` VARCHAR(42) FIRST;

Задание Добавить столбец `sample` тип VARCHAR(5) к таблице `Заказчики` после столбца `City`

3. Для изменения типа атрибута таблицы служит подкоманда MODIFY, для которой нужно указать таблицу, название атрибута и заново перечислить все требуемые для него параметры. Например, чтобы изменить тип атрибута "author" таблицы "news" на CHAR(42), нужно выполнить следующую команду:

ALTER TABLE `news` MODIFY COLUMN `author` CHAR(42);

Задание Изменить тип столбца `sample` на VARCHAR(10) в таблице `Заказчики`

4. Для удаления атрибута из таблицы служит подкоманда DROP COLUMN. Например, команда удаления атрибута "author" из таблицы "news" выглядит так:

ALTER TABLE `news` DROP COLUMN `author`;

Задание Удалить столбец `sample` на из таблицы `Заказчики`