- •Модуль 1 Тема 1. Вступ до sql. Синтаксис sql. Типи даних.
- •1. Вступ до sql.
- •Функції sql:
- •Роль sql
- •Переваги sql:
- •Синтаксис sql.
- •Типи даних.
- •1.3.1. Команди
- •1.3.2. Імена
- •1.3.3. Типи даних
- •1.3.4. Константи
- •1.3.4.1. Числові константи
- •1 .3.4.2. Літерні рядки
- •1.3.4.3. Константи дати і часу
- •1.3.4.4. Іменовані константи
- •1.3.5. Вирази
- •1.3.6. Вбудовані функції
- •Тема 2. Створення баз даних
- •Мова визначення даних
- •2. Створення бази даних
- •Тема 3. Створення таблиць
- •1. Команда створення таблиці.
- •2. Заборона значення null за допомогою обмеження not null
- •Тема 4. Вставка стрічок з допомогою оператора insert. Вилучення стрічок з допомогою оператора delete, редагування стрічки з допомогою команди update.
- •Вставка рядків за допомогою команди insert.
- •Додавання рядка за допомогою положення стовпця
- •Додавання рядка за допомогою назв стовпців
- •Додавання рядків з однієї таблиці в іншу
- •Зміна рядків за допомогою команди update.
- •Зміна рядків
- •Видалення рядків за допомогою команди delete
- •Видалення рядків
- •Тема 5. Оператор select
- •Оператор select.
- •Обчислювальні стовпчики. Альтернативне ім’я стовпчику.
- •Порівняння значення стовпчика із константою
- •Правила виконання однотабличних запитів на вибірку
- •Тема 6. Комбінування умов з допомогою операторів and, or, not. Порівняння по шаблону. Порівняння з діапазоном. Сортування стрічок з допомогою речення order by.
- •Порівняння значень виразів має наступну синтаксичну діаграму:
- •Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць
- •1. Створення псевдонімів.
- •2. З’єднання таблиці із собою.
- •3. Просте з’єднання таблиць (з’єднання за рівністю)
- •Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)
- •3. Запити на вибірку до трьох і більше таблиць
- •4. Запити на об’єднання
- •Тема 8. Введення обмежень в базах даних
- •1. Види обмежень в базі даних.
- •Основні принципи роботи з обмеженнями
- •Присвоєння назви обмеженню
- •2. Первинний і унікальний ключі.
- •3. Зовнішні ключі.
- •4. Обмеження check
- •5. Вилучення обмежень.
- •Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.
- •1. Визначення збережуваної процедури.
- •1.2. Цикли й оператори розгалуження.
- •2. Створення генераторів.
- •2.1. Індекси.
- •2.2. Обробка виключень і помилок.
- •3. 1.Означення тригера.
- •3.2. Приклад тригера.
- •3.3. Контекстні змінні.
- •Тема 10. Безпека в базах даних
- •1. Користувач InterBase.
- •3. Організація користувачі у групи за допомогою ролей.
- •4. Права. Роздача прав.
- •5. Анулювання прав.
- •Модуль 2 Тема 11. Оператор exists. Сумування і групування даних.
- •1.1. Оператор exists.
- •1.2. Використання exists з співвіднесеними підзапитами.
- •1.3. Комбінація оператора exists і з’єднання.
- •1.4. Використання not exists.
- •1.5. Використання складних підзаписів з оператором exists.
- •2.1. Агрегатні (статистичні) функції
- •2.2. Правила опрацювання значення null агрегатними функціями:
- •2.3.Опрацювання унікальних записів агрегатними функціями
- •2.4. Агрегатні функції і значення null
- •3.1. Групування записів
- •3.2. Секція having – умова відбору груп
- •3.3. Обмеження на умову відбору груп
- •3.4. Значення null і умова відбору груп
- •3.5. Секція having без секції group by
- •Тема 12. З’єднання з базою даних. Використання збережуваних процедур в Delphi
- •1. З’єднання з сервером
- •2. Використання збережуваних процедур в Delphi.
- •Компонент tStoredProc.
- •Тема 13. Використання механізму транзакцій компонента Database. Керування транзакціями
- •Тема 14. Сервер баз даних InterBase і компоненти InterBase Express.
- •1. Сервер баз даних InterBase і компоненти InterBase Express
- •2. Механізм доступу до даних InterBase Express
- •3. Компонент tibDatabase.
- •Тема 15. Виконання запитів за допомогою компонента tibDataSet
- •1. Вибірка даних з таблиці.
- •2. Редагування даних за допомогою візуальних компонентів.
- •3. Програмне редагування даних.
- •Тема 16. Підпорядковані запити в таблицях Механізм master-detail
- •Література
2. Створення генераторів.
Що таке генератор? Генератор – це іменований лічильник. Всередині бази даних ми можемо створити лічильник, дати йому унікальне ім’я в межах цієї бази і керувати значеннями цього лічильника. Це і буде генератор. Приклад:
CREATE GENERATOR g1; SET GENERATOR g1 TO 2445;
В цьому прикладі в першому рядку бази даних створюється генератор з іменем g1, а у другому – цьому генератору присвоюється значення 2445. Щоб одержати і змінювати значення генераторів, існує функція GEN_ID.
Ця функція приймає в ролі параметрів ім’я генератора і величину приросту, яку потрібно надати даному генератору, а повертає цілочисельне значення, що відповідає значенню генератора, одержаному в результаті додавання до нього приросту. Ось кілька прикладів виклику функції GEN_ID:
Current_value = GEN_ID (g1, 0)
Тут current_value – це змінна, g1 – генератор, і 0 – це приріст. В цьому прикладі в змінну current_value попаде значення генератора g1 після додавання до нього приросту 0 – тобто поточне значення генератора!
Для одержання наступного значення генератора слід викликати функцію GEN_ID з ненульовим приростом:
Current_value = GEN_ID (g1, 1)
Приріст може бути не рівним одиниці – він може бути довільним, в тому числі і плаваючим, і навіть від’ємним:
Current_value = GEN_ID (g1, -23)
В лиці генераторів ми маємо надійний механізм для формування унікальних первинних ключів. Як тепер вмістити одержуване від генератора значення в полі первинного ключа? Для цього є два способи – вставка первинного ключа на стороні клієнта і на стороні сервера.
У випадку формування первинного ключа на клієнті відбувається таке. Коли сформовано запис, який буде уставлено до бази даних, виконується виклик функції GEN_ID(generator, 1) і одержане значення підставляється в сформований запис. Відбувається вставка в таблицю, при цьому ми одержуємо гарантовано унікальний первинний ключ.
Другий спосіб – формування первинного ключа на стороні сервера – взагалі виключає вся турботу на стороні клієнта про те, яким буде значення первинного ключа. В цьому випадку при вставці запису спрацьовує тригер – спеціальний об’єкт БД, який може здійснювати діє при вставці/вилученні/зміні записів в таблицях. И в цьому тригері відбувається виклик функції GEN_ID, одержання потрібного значення генератора і вставка його в таблицю.
2.1. Індекси.
Індекс – це впорядкований вказівник на записи в таблиці.
Вказівник означає, що індекс містить значення одного або декількох полів в таблиці і адреси розміщення цих даних. Іншими словами, індекс складається з пар значень "значення поля" – "фізичне розміщення цього поля". Таким чином, за значенням поля (або полів), що входять до індексу, за допомогою індексу можна швидко знайти те місце в таблиці, де розміщується запис, що містить це значення. Впорядкований – означає, що значення полів, які зберігаються в індексі, впорядковані.
Єдине, чому сприяють індекси, – це прискорення пошуку запису за його індексованим полем (індексоване – те що входить до індексу). Пошук за допомогою індекса здійснюється в багато разів швидше, ніж при послідовному переборі всіх значень з таблиці.
Індекс не є частиною таблиці – це окремий об’єкт, пов’язаний з таблицею і іншими об’єктами бази даних. Це дуже важливий момент реалізації СУБД, що дозволяє відділити збереження інформації від її подання.
Індекси використовуються в трьох основних випадках:
-
Прискорення виконання запитів. Індекси створюються для полів, які використовуються в умовах пошуку SQL-запитів.
-
Забезпечення унікальності значень в полях. Обмеження первинного ключа вимагає, щоб в усій таблиці не знайшлося двох однакових значень полів, що входять до первинного ключа. Щоб виконати цю умову, необхідно при кожній вставці нового запису здійснювати пошук такого ж значення, яке буде вставлене.
-
Забезпечення цілісності посилань. Обмеження зовнішніх ключів Foreign key використовується для перевірки того, щоб значення, які вставляються до таблиці, обов’язково існували в іншій таблиці. При створенні зовнішнього ключа автоматично створюється індекс, який використовується як для прискорення запитів, що використовують з’єднання таблиць, так і для перевірки умов зовнішнього ключа.
Формат команди, що створює індекси має вид: CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX index ON table (col [, col ...]);
Мінімальним виразом, що створює індекс, є:
CREATE INDEX my_index ON Table_example(ID)
В цьому прикладі створюється індекс з іменем my_index для таблиці Table_example, причому індексованим полем є поле ID. Індекс є зростаючим, тобто значення в ньому впорядковані за зростанням, а також не унікальним, тобто значить, що поле ID може мати декілька однакових значень. Це самий простий приклад індексу – самий поширений.
Як бачимо з опису синтаксису, індекс може містити не одне, а декілька полів.
У визначенні індексу є ще одна опція – UNIQUE. Якщо її вказати, то індекс дозволить заносити до таблиці лише унікальні значення. Фактично це служить основою для реалізації унікальних ключів (UNIQUЕ KEY).