2. Посібник з Firebird
Перш ніж перейти до основ мови SQL, ми розповімо читачеві, як встановити Firebird SGBD, а також графічний клієнт IB-Expert.
2.1. Де знайти Firebird?
Головний сайт Firebird — це [http://firebird.sourceforge.net/]. На сторінці завантажень наведено такі посилання (квітень 2005 року):

Необхідно завантажити такі файли:
SGBD для Windows | |
бібліотеку класів для додатків .NET, яка дозволяє отримати доступ до SGBD без використання драйвера ODBC. | |
драйвер ODBC для Firebird |
Встановіть ці компоненти. SGBD встановлюється у папку, вміст якої виглядає приблизно так:
![]() |
Бінарні файли знаходяться у папці [bin]:
![]() |
дозволяє запускати/зупиняти SGBD | |
лінійний клієнт, що дозволяє керувати базами даних |
Слід зазначити, що за замовчуванням адміністратор SGBD називається [SYSDBA], а його пароль — [masterkey]. У [Démarrer] встановлено такі меню:

Опція [Firebird Guardian] дозволяє запускати/зупиняти SGBD. Після запуску піктограма SGBD залишається на панелі завдань Windows:
![]() |
Для створення та роботи з базами даних Firebird за допомогою клієнтської програми [isql.exe] необхідно ознайомитися з документацією, що входить до комплекту поставки продукту та знаходиться у папці [doc].
2.2. : документація до Firebird
Документацію щодо Firebird та мови SQL можна знайти на сайті Firebird (січень 2006 року):

Доступні різні посібники англійською мовою:
для початку роботи з FB | |
для розуміння кодів помилок, що повертаються FB |
Також доступні навчальні посібники з мови SQL:

щоб дізнатися, як створювати таблиці, які типи даних можна використовувати тощо... | |
довідник для вивчення SQL з Firebird |
Швидкий спосіб роботи з Firebird та вивчення мови SQL — це використання графічного клієнта. Таким клієнтом є IB-Expert, описаний у наступному абзаці.
2.3. Робота з SGBD Firebird за допомогою IB- Expert
Головний сайт IB-Expert — [http://www.ibexpert.com/]. На сторінці завантажень наведено такі посилання:

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

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

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

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

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

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

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

2.4. Створення таблиці даних
Створимо таблицю. Клацніть правою кнопкою миші на [Tables] (див. вікно вище) і виберіть опцію [New Table]. З’явиться вікно налаштування властивостей таблиці:
![]() |
Почнемо з того, що дамо таблиці ім’я [ARTICLES], скориставшись полем введення [1]:
![]() |
Скористаємося полем введення [2], щоб визначити первинний ключ [ID]:
![]() |
Поле можна зробити первинним ключем, двічі клацнувши на полі [PK] (Primary Key). Додамо поля за допомогою кнопки, розташованої над [3]:

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

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

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

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

Тут ми бачимо обмеження первинного ключа, яке ми створили. Можна додати й інші обмеження:
- зовнішні ключі [Foreign Keys]
- обмеження цілісності полів [Checks]
- обмеження унікальності полів [Uniques]
Зазначимо, що:
- значення полів [ID, PRIX, STOCKACTUEL, STOKMINIMUM] повинні бути >0
- поле [NOM] має бути не порожнім і унікальним
Відкриємо панель [Checks] і клацнемо правою кнопкою миші в області визначення обмежень, щоб додати нове обмеження:

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

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

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

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

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

Вона надає код 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]:

Дані вводяться подвійним клацанням миші на полях введення кожного рядка таблиці. Новий рядок додається за допомогою кнопки [+], а рядок видаляється за допомогою кнопки [-]. Ці операції виконуються в транзакції, яка підтверджується кнопкою [Commit Transaction] (див. вище). Без цього підтвердження дані будуть втрачені.
2.6. Редактор SQL для [IB-Expert]
Мова SQL (Structured Query Language) дозволяє користувачеві:
- створювати таблиці, вказуючи тип даних, які в них будуть зберігатися, та обмеження, яким ці дані повинні відповідати
- вводити в них дані
- змінювати деякі з них
- видаляти інші
- використовувати їхній вміст для отримання інформації
- ...
IBExpert дозволяє користувачеві виконувати операції з 1 по 4 у графічному режимі. Ми щойно це побачили. Коли база даних містить багато таблиць, кожна з яких має сотні рядків, потрібна інформація, яку важко отримати візуально. Припустимо, наприклад, що віртуальний інтернет-магазин має тисячі покупців на місяць. Усі покупки реєструються в базі даних. Через шість місяців виявляється, що товар «X» має дефект. Потрібно зв’язатися з усіма, хто його придбав, щоб вони повернули товар для безкоштовного обміну. Як знайти адреси цих покупців?
- Можна візуально переглянути всі таблиці та відшукати цих покупців. На це знадобиться кілька годин.
- Можна виконати запит SQL, який за лічені секунди надасть список цих осіб
Мова SQL стає корисною,
- як обсяг даних у таблицях є значним
- коли є багато таблиць, пов’язаних між собою
- інформація, яку потрібно отримати, розподілена між кількома таблицями
- ...
Тепер ми представляємо редактор SQL від IBExpert. Доступ до нього можна отримати через опцію [Tools/SQL Editor] або [F12]:

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

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

Вище на вкладці [Results] відображається таблиця результатів запиту SQL [Select]. Щоб відправити нове замовлення SQL, достатньо повернутися на вкладку [Edit]. Там ми побачимо замовлення SQL, яке вже було виконано.
![]()
Деякі кнопки на панелі інструментів є корисними:
- кнопка [New Query] дозволяє перейти до нового запиту SQL:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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





