Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Особливості мови SQL.doc
Скачиваний:
4
Добавлен:
16.08.2019
Размер:
651.78 Кб
Скачать

2.3. Модифікація (зміна) таблиць.

Після того, як таблиця була створена, її можна змінити Команда ALTER TABLE є широко доступним засобом для того, щоб змінити визначення існуючої таблиці. Частіше всього з її допомогою додають поля до таблиці, хоча вона може видаляти або змінювати їхні розміри. Типовий синтаксис цієї команди для додавання стовпця до таблиці, такий:

ALTER TABLE <TABLE NAME>

ADD <COLUMN NAME> <DATA TYPE> <SIZE>;

Варто пам'ятати, що поле буде додане з NULL значеннями для всіх записів таблиці. Крім того, нове поле стане останнім по порядку в таблиці. Припускає додавання фазу декілька нових полів, відділивши їхніми комами в одній команді.

Наприклад, для додавання до таблиці STUDENTS двох полів для зберігання інформації про курс і спеціальність студента, можна скористатися наступною командою:

ALTER TABLE STUDENTS

ADD COURS INTEGER, SPEC CHAR (10);

З використанням цієї команди є можливість видаляти або змінювати поля, причому найбільш часте зміною буває просто збільшення його розміру. Обов'язково потрібно переконатися, що будь-які зміни, що вносяться, не суперечать існуючим даним - наприклад, спроба зменшити розмір поля може привести до втрати даних.

ALTER TABLE не діє, коли таблиця повинна бути перевизначена, проте при розробці БД не варто виключати необхідність цієї дії. Крім того, зміна структури таблиці в той момент, коли вона знаходиться у використовуванні, також чревато втратою інформації - наприклад, запит може потерпіти невдачу із тієї причини, що деякого поля в таблиці просто вже не існує. Із цих причин краще розробляти БД так. щоб використати ALTER TABLE тільки у крайньому разі.

2.4. Видалення таблиць.

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

Синтаксис команди для видалення таблиці (за умови, що вона є порожньою) наступний:

DROP TABLE <TABLE NAME>;

Після виконання цієї команди, ім'я таблиці більше не розпізнається, і немає таких дій, які могли бути виконані з цим об'єктом. Перед видаленням варто переконатися в тому. що ця таблиця не посилається на іншу таблицю і що вона не використовується в якому-небудь уявленні.

Наприклад, для видалення таблиці STUDENTS, в якій всі записи заздалегідь видалені, просто вводиться наступне: DROP TABLE STUDENTS;

Таким чином, використовування розглянутих DDL команд дозволяє створювати нові, змінювати структуру існуючих і видаляти порожні таблиці БД.

2.5. Індекси.

Індексом прийнято називати впорядкований список полів або груп полів в таблиці. Таблиці можуть мати величезну кількість записів, при цьому, як було помічено вище, записи не знаходяться в якому-небудь певному порядку, тому на їхній пошук по вказаному критерію може потрібно достатньо тривалий час.

Індексна адреса - це спеціальний метод забезпечення об'єднання всіх значень в групи з однієї або більше записів, які відрізняються одна від одної, т.к. унікальність записів часто необхідна.

Індекси - це корисний інструмент, який широко застосовується у всіх сучасних СУБД. Коли створюється індекс в полі, БД запам'ятовує відповідний порядок всіх значень цього поля в області пам'яті. Про переваги індексів може говорити наступне: припустимо, що таблиця STUDENTS має декілька тисяч записів, і необхідно знайти студента з конкретним номером студентського квитка. Т.к. записи в таблиці не впорядковані, то СУБД буде вимушена переглядати всю таблицю, рядок за рядком, перевіряючи кожного разу значення поля SNUM на рівність шуканому значенню. За наявності індексу в полі SNUM, система могла б знайти шуканий номер прямо в цьому впорядкованому індексі, і дати інформацію про те, як знайти правильний рядок таблиці.

В індексів є і недоліки. Тоді як індекс значно поліпшує ефективність запитів, використовування індексу дещо уповільнює операції модифікації, особливе такі, як INSERT і DELETE. Крім того, сам індекс займає місце на пристрої зберігання інформації.

Звідси витікає, що при створенні таблиці необхідно ухвалити зважене рішення, індексувати її чи ні. Індекси можуть полягати відразу з декількох полів, при цьому перше поле є як би головним, друге упорядковується усередині першого, третє усередині другого, і т. д.

Синтаксис команди для створення індексу наступний:

CREATE INDEX <INDSX NAME> ON <TABLE NAME> (<COLUMN NAME> [,<COLUMN NAME>]...);

Зрозуміло, що таблиця, для якої створюється індекс, повинна вже існувати і містити імена полів, що індексуються. При цьому ім'я індексу не може бути використане для чого-небудь іншого в БД і SQL сам вирішує, коли він необхідний для роботи і використовує його автоматично.

Наведемо наступний приклад. Очевидно, що в таблиці STUDENTS одним з найбільш часто уживаних може бути индеке по полю, що містить прізвище студента. Тоді команда для створення такого індексу буде наступною:

CREATE INDEX SFAMIDX ON STUDENTS (SFAM);

Після цього при пошуку інформації про студентів, СУБД буде знаходити її дуже швидко. Проте, при створенні цього індексу, йому не наказала унікальність, не дивлячись на те. що це є одним з його призначень.

Для створення унікальних (повторюються значень, що не містять) індексів використовують ключове слово UNIQUE в команді CREATE INDEX. Фактично такий індекс буде бути первинним ключем таблиці. Наприклад, для таблиці STUDENTS поле SNUM підходить в якості первинного ключа, і він стане першим кандидатом для унікального індексу. Створити його можна командою:

CREATE UNIQUE INDEX

SNUMIDX ON STUDENTS (SNUM) ;

Майте на увазі, що ця команда не буде виконана, якщо в полі SNUM є неунікальні значення. Тому рекомендується створювати індекси відразу після того, як створена таблиця і до введення в неї яких-небудь значень. Цікава і така особливість унікального індексу: якщо в ньому використовується більше одного поля (тобто він є комбінацією значень), то. взагалі кажучи, кожне з цих полів може і не бути унікальним.

Оскільки основною ознакою індексу є його ім'я. то по його імені він може бути ідентифікований і видалений. Звичайно користувачі не знають про існування індексу, SQL автоматично визначає - чи дозволено користувачу використати індекс, і, якщо так. то дозволяє його вживання.

Проте, для видалення індексу, необхідно знати його ім'я. З урахуванням цього команда для видалення має наступний синтаксис: DROP INDEX <INDEX NAME>;

Наприклад, для видалення створеного індексу по прізвищу студента, можна скористатися наступною командою: DROP INDEX SFAMIDX;

Врахуйте, що видалення індексу у жодному випадку не впливає на дані, які містяться в полях.