Мова реляційних БД SQL: засоби визначення даних
1. Ddl: оператори створення бд
1.1. Ddl: оператори створення таблиць
Дотепер поняття "таблиця", як правило, зв'язувалося з реальною чи базовою таблицею, тобто c таблицею, для кожного рядка якої в дійсності є деякий двійник, що зберігається у фізичній пам'яті машини. Однак SQL використовує і створює ряд віртуальних (начебто існуючих) таблиць: представлень, курсорів і неіменованих робочих таблиць, у яких формуються результати запитів на одержання даних з базових таблиць і, можливо, представлень. Це таблиці, що не існують у базі даних, але як би існують з погляду користувача.
Базові таблиці описуються в SQL за допомогою речення CREATE TABLE (створити таблицю), синтаксис якого має невеликі відлмінності в різних СУБД. Однак усі вони підтримують наступну мінімальну форму:
CREATE TABLE базова_таблиця (стовпець тип_даних [NOT NULL]
[,стовпець тип_даних [NOT NULL]] ...);
де тип_даних повинен належати до одному з типів даних, підтримуваних СУБД.
Речення СRЕАTЕ TABLE специфікує ім'я базової таблиці, що повинна бути створена, імена її стовпців і типи даних для цих стовпців.
Наприклад,
CREATE TABLE Блюда
(БЛ SMALLINT,
Блюдо CHAR (70),
Вид CHAR (1),
Основа CHAR (10),
Вихід FLOAT,
Праця SMALLINT);
У результаті створюється порожня базова таблиця Блюда, а в системний каталог[1] поміщається рядок, що описує цю таблицю. Відзначимо, що в професійних СУБД ім'я таблиці доповнюється ім'ям користувача, що видав речення CREATE TABLE. Якщо цей користувач зареєстрований у системі під ім'ям Kirill, то в каталозі буде зареєстрована таблиця Kirill.Блюда і зазначений користувач може звертатися до неї по імені Kirill.блюда чи по скороченому імені Блюда.
Повний синтаксис команди створення таблиці:
CREATE TABLE <ім'я_таблиці>
(<ім'я_стовпця> <тип_стовпця>
[NOT NULL]
[UNIQUE | PRIMARY KEY]
[REFERENCES <ім'я_майстер_таблиці>
<ім'я_стовпця>]] , ...);
Крім імені таблиці, в операторі специфікуєся список елементів таблиці, кожний з який служить або для визначення стовпця, або для визначення обмеження цілісності обумовленої таблиці. Потрібно наявність хоча б одного визначення стовпця.
Користувач зобов'язаний вказати ім'я таблиці і список стовпців. Для кожного стовпця обов'язково вказуються його ім'я і тип, а також опціонально можуть бути зазначені параметри
NOT NULL - у цьому випадку елементи стовпця завжди повинні мати визначене значення (не NULL)
один із взаємовиключних параметрів UNIQUE - значення кожного елементу стовпця повинне бути унікальним чи PRIMARY KEY - стовпець є первинним ключем.
REFERNECES <ім'я_майстер_таблиці> [<ім'я_стовпця>] - ця конструкція визначає, що даний стовпець є зовнішнім ключем і вказує на ключ який майстер_таблиці він посилається.
Контроль за виконанням зазначених умов здійснює СУБД.
Конструкція NOT NULL забороняє використання невизначеного значення, тобто спеціального значення, що вводиться для представлення "невідомого значення" чи "непридатного значення". Наприклад, рядок постачання таблиці Постачання може містити невизначене значення в стовпці Ціна і (чи) Кількість (відомо, що постачальник поставляє зазначений продукт, але на даний момент невідома ціна цього продукту і (чи) обсяг постачання).
CREATЕ TABLE - виконуване речення. Якщо його ввести з термінала, система негайно побудує таблицю Блюда, що спочатку буде порожньою: вона буде містити тільки рядок заголовків стовпців, але не буде ще містити ніяких рядків з даними.
Існуючу базову таблицю можна в будь-який момент знищити за допомогою речення DROP TABLE (знищити таблицю):
DROP TABLE базова_таблиця;
по який віддаляється опис таблиці, її дані, зв'язані з нею представлення й індекси, побудовані для стовпців таблиці.
У SQL існує також речення ALTER TABLE (змінити таблицю), що дозволяє додати праворуч до таблиці новий стовпець, тобто модифікувати опис таблиці.
При описі команд передбачається, що:
текст, набраний малими літерами (наприклад, CREATE TABLE) є обов'язковим
текст, набраний прописними буквами й ув'язнений у кутові чи круглі дужки (наприклад, <ім'я_бази_даних>) позначає перемінну, що вводиться користувачем
у квадратні дужки (наприклад, [NOT NULL]) полягає необов'язкова частина команди
взаємовиключні елементи команди розділяються вертикальною рисою (наприклад, [UNIQUE | PRIMARY KEY]).
