Skip to content

2. Посібник з Firebird

Перш ніж перейти до основ мови SQL, ми розповімо читачеві, як встановити Firebird SGBD, а також графічний клієнт IB-Expert.

2.1. Де знайти Firebird?

Головний сайт Firebird — це [http://firebird.sourceforge.net/]. На сторінці завантажень наведено такі посилання (квітень 2005 року):

Image

Необхідно завантажити такі файли:

firebird-win32
SGBD для Windows
firebird-net-provider
бібліотеку класів для додатків .NET, яка дозволяє отримати доступ до SGBD без використання драйвера ODBC.
firebird-ODBC-driver
драйвер ODBC для Firebird

Встановіть ці компоненти. SGBD встановлюється у папку, вміст якої виглядає приблизно так:

Бінарні файли знаходяться у папці [bin]:

fbguard.exe
дозволяє запускати/зупиняти SGBD
isql.exe
лінійний клієнт, що дозволяє керувати базами даних

Слід зазначити, що за замовчуванням адміністратор SGBD називається [SYSDBA], а його пароль — [masterkey]. У [Démarrer] встановлено такі меню:

Image

Опція [Firebird Guardian] дозволяє запускати/зупиняти SGBD. Після запуску піктограма SGBD залишається на панелі завдань Windows:

Для створення та роботи з базами даних Firebird за допомогою клієнтської програми [isql.exe] необхідно ознайомитися з документацією, що входить до комплекту поставки продукту та знаходиться у папці [doc].

2.2. : документація до Firebird

Документацію щодо Firebird та мови SQL можна знайти на сайті Firebird (січень 2006 року):

Image

Доступні різні посібники англійською мовою:

Firebird 1.5 Quick Start Guide
для початку роботи з FB
Firebird 1.5 Error Codes
для розуміння кодів помилок, що повертаються FB

Також доступні навчальні посібники з мови SQL:

Image

Data Definition Guide
щоб дізнатися, як створювати таблиці, які типи даних можна використовувати тощо...
Language Reference
довідник для вивчення SQL з Firebird

Швидкий спосіб роботи з Firebird та вивчення мови SQL — це використання графічного клієнта. Таким клієнтом є IB-Expert, описаний у наступному абзаці.

2.3. Робота з SGBD Firebird за допомогою IB- Expert

Головний сайт IB-Expert — [http://www.ibexpert.com/]. На сторінці завантажень наведено такі посилання:

Image

Виберіть безкоштовну версію [Personal Edition]. Після її завантаження та встановлення у вас з’явиться папка, схожа на таку:

Image

Виконуваний файл — [ibexpert.exe]. Зазвичай у меню доступний ярлик [Démarrer]:

Image

Після запуску IBExpert відображає таке вікно:

Image

Скористаємося опцією [Database/Create Database] « » для створення бази даних:

Server
може бути [local] або [remote]. У даному випадку наш сервер знаходиться на тій самій машині, що й [IBExpert]. Тому вибираємо [local]
Database
використовуємо кнопку типу [dossier] у списку, щоб вказати файл бази даних. Firebird зберігає всю базу даних в одному файлі. Це одна з його переваг. Базу даних можна перенести з одного комп’ютера на інший, просто скопіювавши файл. Суфікс [.gdb] додається автоматично.
Username
SYSDBA — це адміністратор за замовчуванням у поточних дистрибутивах Firebird
Password
masterkey — це пароль адміністратора SYSDBA для поточних дистрибутивів Firebird
Dialect
діалект SQL, який слід використовувати
Register Database
якщо поле відмічено, IBExpert відобразить посилання на створену базу даних після її створення

Якщо після натискання кнопки створення [OK] з’явиться таке попередження:

Image

це означає, що ви не запустили Firebird. Запустіть його. З’явиться нове вікно:

Image

Charset
Сімейство шрифтів, яке слід використовувати. Хоча на знімку екрана вище немає жодної інформації, рекомендується вибрати зі списку сімейство [ISO-8859-1], яке дозволяє використовувати латинські символи з діакритичними знаками.
Server version
[IBExpert] здатний обробляти різні варіанти SGBD, похідні від Interbase. Виберіть версію Firebird, яку ви встановили:

Після підтвердження цього нового вікна за допомогою [Register] ми отримуємо такий результат:

Image

Щоб отримати доступ до створеної бази даних, достатньо двічі клацнути на її посилання. IBExpert відобразить дерево, що надає доступ до властивостей бази даних:

Image

2.4. Створення таблиці даних

Створимо таблицю. Клацніть правою кнопкою миші на [Tables] (див. вікно вище) і виберіть опцію [New Table]. З’явиться вікно налаштування властивостей таблиці:

Почнемо з того, що дамо таблиці ім’я [ARTICLES], скориставшись полем введення [1]:

Скористаємося полем введення [2], щоб визначити первинний ключ [ID]:

Поле можна зробити первинним ключем, двічі клацнувши на полі [PK] (Primary Key). Додамо поля за допомогою кнопки, розташованої над [3]:

Image

Доки ми не «скомпілювали» наше визначення, таблиця не створюється. Скористаємося кнопкою [Compile] вище, щоб завершити визначення таблиці. IBExpert готує запити SQL для створення таблиці та запитує підтвердження:

Image

Цікаво, що IBExpert відображає запити SQL, які він виконав. Це дозволяє ознайомитися як з мовою SQL, так і з діалектом SQL, який, можливо, є пропрієтарним. Кнопка [Commit] дозволяє підтвердити поточну транзакцію, а [Rollback] — скасувати її. Тут ми підтверджуємо її за допомогою [Commit]. Після цього IBExpert додає створену таблицю до дерева нашої бази даних:

Image

Двічі клацнувши на таблиці, ми отримуємо доступ до її властивостей:

Image

Панель [Constraints] дозволяє додати до таблиці нові обмеження цілісності. Відкриємо її:

Image

Тут ми бачимо обмеження первинного ключа, яке ми створили. Можна додати й інші обмеження:

  • зовнішні ключі [Foreign Keys]
  • обмеження цілісності полів [Checks]
  • обмеження унікальності полів [Uniques]

Зазначимо, що:

  • значення полів [ID, PRIX, STOCKACTUEL, STOKMINIMUM] повинні бути >0
  • поле [NOM] має бути не порожнім і унікальним

Відкриємо панель [Checks] і клацнемо правою кнопкою миші в області визначення обмежень, щоб додати нове обмеження:

Image

Визначимо необхідні обмеження:

Image

Зверніть увагу, що в обмеженні [NOM<>''] використовуються дві апострофи, а не лапки. Скомпілюємо ці обмеження за допомогою кнопки [Compile] вище:

Image

І тут знову IBExpert демонструє свою навчальну функцію, вказуючи запити SQL, які він виконав. Тепер перейдемо до панелі [Constraints/Uniques], щоб вказати, що ім’я має бути унікальним. Це означає, що в таблиці не може бути двох однакових імен.

Image

Визначимо обмеження:

Image

Потім скомпілюємо його. Після цього відкриємо панель [DDL] (Data Definition Language) таблиці [ARTICLES]:

Image

Вона надає код SQL для генерації таблиці з усіма її обмеженнями. Цей код можна зберегти у скрипті, щоб згодом його виконати:

SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
    ID            INTEGER NOT NULL,
    NOM           VARCHAR(20) NOT NULL,
    PRIX          DOUBLE PRECISION NOT NULL,
    STOCKACTUEL   INTEGER NOT NULL,
    STOCKMINIMUM  INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);

2.5. Введення даних у таблицю

Тепер настав час внести дані в таблицю [ARTICLES]. Для цього скористаємося її панеллю [Data]:

Image

Дані вводяться подвійним клацанням миші на полях введення кожного рядка таблиці. Новий рядок додається за допомогою кнопки [+], а рядок видаляється за допомогою кнопки [-]. Ці операції виконуються в транзакції, яка підтверджується кнопкою [Commit Transaction] (див. вище). Без цього підтвердження дані будуть втрачені.

2.6. Редактор SQL для [IB-Expert]

Мова SQL (Structured Query Language) дозволяє користувачеві:

  1. створювати таблиці, вказуючи тип даних, які в них будуть зберігатися, та обмеження, яким ці дані повинні відповідати
  1. вводити в них дані
  2. змінювати деякі з них
  3. видаляти інші
  4. використовувати їхній вміст для отримання інформації
  5. ...

IBExpert дозволяє користувачеві виконувати операції з 1 по 4 у графічному режимі. Ми щойно це побачили. Коли база даних містить багато таблиць, кожна з яких має сотні рядків, потрібна інформація, яку важко отримати візуально. Припустимо, наприклад, що віртуальний інтернет-магазин має тисячі покупців на місяць. Усі покупки реєструються в базі даних. Через шість місяців виявляється, що товар «X» має дефект. Потрібно зв’язатися з усіма, хто його придбав, щоб вони повернули товар для безкоштовного обміну. Як знайти адреси цих покупців?

  1. Можна візуально переглянути всі таблиці та відшукати цих покупців. На це знадобиться кілька годин.
  2. Можна виконати запит SQL, який за лічені секунди надасть список цих осіб

Мова SQL стає корисною,

  • як обсяг даних у таблицях є значним
  • коли є багато таблиць, пов’язаних між собою
  • інформація, яку потрібно отримати, розподілена між кількома таблицями
  • ...

Тепер ми представляємо редактор SQL від IBExpert. Доступ до нього можна отримати через опцію [Tools/SQL Editor] або [F12]:

Image

Тоді ми отримаємо доступ до розширеного редактора запитів SQL, за допомогою якого можна експериментувати із запитами. Введемо запит:

Image

Виконуємо запит SQL за допомогою кнопки [Execute], розташованої вище. Отримуємо такий результат:

Image

Вище на вкладці [Results] відображається таблиця результатів запиту SQL [Select]. Щоб відправити нове замовлення SQL, достатньо повернутися на вкладку [Edit]. Там ми побачимо замовлення SQL, яке вже було виконано.

Image

Деякі кнопки на панелі інструментів є корисними:

  • кнопка [New Query] дозволяє перейти до нового запиту SQL:

Image

У результаті з’являється порожня сторінка редагування:

Image

Після цього можна ввести нову команду SQL:

Image

і виконати його:

Image

Повернемося до вкладки [Edit]. Різні видані команди SQL зберігаються в пам'яті за допомогою [IB-xpert]. Кнопка [Previous Query] дозволяє повернутися до раніше виданого замовлення SQL:

Image

Після цього відбувається повернення до попереднього запиту:

Image

Кнопка [Next Query] дозволяє перейти до наступного замовлення SQL:

Image

Тоді ми бачимо, що замовлення SQL йде слідом за замовленням SQL у списку збережених замовлень:

Image

Кнопка [Delete Query] дозволяє видалити замовлення SQL зі списку збережених замовлень:

Image

Кнопка [Clear Current Query] дозволяє очистити вміст редактора для відображеного замовлення SQL:

Image

Кнопка [Commit] дозволяє остаточно підтвердити зміни, внесені до бази даних:

Image

Кнопка [RollBack] дозволяє скасувати зміни, внесені до бази даних після останнього натискання кнопки [Commit]. Якщо з моменту підключення до бази даних не було натиснуто кнопку [Commit], то скасовуються зміни, внесені саме під час цього підключення.

Image

Розглянемо приклад. Вставимо новий рядок у таблицю:

Image

Команда SQL виконується, але нічого не відображається. Невідомо, чи відбулося вставлення. Щоб це з’ясувати, виконаємо команду SQL, що йде за командою [New Query]:

Image

Отримуємо [Execute] такий результат:

Image

Отже, рядок було успішно вставлено. Тепер розглянемо вміст таблиці іншим способом. Двічі клацнімо на таблиці [ARTICLES] у браузері баз даних:

Image

Ми отримуємо таку таблицю:

Image

Кнопка зі стрілкою, показана вище, дозволяє оновити таблицю. Після оновлення таблиця, показана вище, не змінюється. Складається враження, що новий рядок не був вставлений. Повернемося до редактора SQL (F12), а потім підтвердимо замовлення SQL, сформоване за допомогою кнопки [Commit]:

Image

Зробивши це, повернемося до таблиці [ARTICLES]. Ми бачимо, що нічого не змінилося навіть після використання кнопки [Refresh]:

Image

Тепер відкриємо вкладку [Fields], а потім повернемося до вкладки [Data]. Цього разу вставлений рядок відображається правильно:

Image

Коли починається виконання різних команд SQL, редактор відкриває так звану транзакцію в базі даних. Зміни, внесені цими командами SQL редактора SQL, будуть видимі лише доти, доки ви залишаєтеся в тому самому редакторі SQL (можна відкрити кілька редакторів). Все відбувається так, ніби редактор SQL працює не з реальною базою даних, а з власною копією. Насправді це відбувається не зовсім так, але така ілюстрація може допомогти нам зрозуміти поняття транзакції. Усі зміни, внесені до копії під час транзакції, стануть видимими в реальній базі даних лише після їхнього підтвердження за допомогою [Commit Transaction]. Після цього поточна транзакція завершується, і починається нова.

Зміни, внесені під час транзакції, можна скасувати за допомогою операції під назвою [Rollback]. Проведемо такий експеримент. Почнемо нову транзакцію (для цього достатньо виконати [Commit] у поточній транзакції) із таким наказом SQL:

Image

Виконаємо цю команду, яка видаляє всі рядки з таблиці [ARTICLES], а потім виконаємо [New Query] — нову команду SQL:

Image

Отримуємо такий результат:

Image

Усі рядки було видалено. Нагадаємо, що це було зроблено на копії таблиці [ARTICLES]. Щоб це перевірити, двічі клацнімо на таблиці [ARTICLES] нижче:

Image

і переглянемо вкладку [Data]:

Image

Навіть якщо натиснути кнопку [Refresh] або перейти на вкладку [Fields], а потім повернутися на вкладку [Data], наведений вище вміст не змінюється. Це вже було пояснено. Ми перебуваємо в іншій транзакції, яка працює з власною копією. Тепер повернімося до редактора SQL (F12) і скористаймося кнопкою [RollBack], щоб скасувати видалення рядків, які було здійснено:

Image

Нам пропонується підтвердити:

Image

Підтверджуємо. Редактор SQL підтверджує, що зміни скасовано:

Image

Для перевірки повторімо вищезазначений запит SQL. Ми бачимо рядки, які були видалені:

Image

Операція [Rollback] повернула копію, над якою працює редактор SQL, до стану, в якому вона перебувала на початку транзакції.