Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL_L_R_1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
633.86 Кб
Скачать
  1. Домашнє завдання

  1. Вивчити теоретичний матеріал за підручником [1], ст. 195 − 226.

  2. Вивчити матеріал лекції.

  1. Виконання роботи

Розглянемо приклад створення бази даних «Форум», яка має наступну структурну схему.

Для цього насамперед треба запустити сервер MySQL. Йдемо в системне меню Пуск - Програми - MySQL - MySQL Server 5.1 - MySQL Command Line Client. Відкриється вікно, що пропонує ввести пароль.

Натискаємо Enter на клавіатурі, якщо ви не вказували пароль при налаштуванні сервера або вказуємо пароль, якщо ви його задавали. Чекаємо запрошення MySQL>.

Нам треба створити базу даних, яку ми назвемо форум. Для цього в SQL існує оператор створити базу даних. Створення бази даних має наступний синтаксис: create database ім’я_бази_даних;

Максимальна довжина імені БД складає 64 знака і може включати букви, цифри, символ "_" і символ "$". Ім'я може починатися з цифри, але не повинно повністю складатися з цифр. Будь-який запит до БД закінчується крапкою з комою (цей символ називається роздільником - delimiter). Отримавши запит, сервер виконує його і в разі успіху видає повідомлення " Query OK..."

І так створюємо БД forum: 

Натискаємо Enter і бачимо відповідь "Query OK ...", яка означає, що БД була створена: 

Ось так все просто. Тепер у цій базі даних нам треба створити 3 таблиці: теми, користувачі і повідомлення. Але перед тим, як це робити, нам треба вказати серверу в яку саме БД ми створюємо таблиці, тобто треба вибрати БД для роботи. Для цього використовується оператор use. Синтаксис вибору БД для роботи наступний: use ім’я_бази_даних;

І так, вибираємо для роботи нашу БД forum: 

Натискаємо Enter і бачимо відповідь "Database changed" - база даних вибрана.

Вибирати БД необхідно в кожному сеансі роботи з MySQL.

Для створення таблиць в SQL існує оператор create table. Створення бази даних має наступний синтаксис: create table ім’я_таблиці (ім’я_першого_стовпця тип, ім’я_другого_стовпця тип, ..., ім’я_останнього_стовпця тип );

Вимоги до імен таблиць і стовпців такі ж, як і для імен БД. До кожному колонку прив'язаний певний тип даних, який обмежує характер інформації, яку можна зберігати в стовпці (наприклад, запобігає введення літер в числове поле). MySQL підтримує кілька типів даних: числові, рядкові, календарні та спеціальний тип NULL, що позначає відсутність інформації. Детально про типи даних ми будемо говорити в наступному уроці, а поки повернемося до наших таблицями. У них у нас всього два типи даних - цілочисельні значення (int) і рядки (text). Отже, створимо першу таблицю - Теми:

Натискаємо Enter - таблиця створена:

І так, ми створили таблицю topics (теми) з трьома стовпцями: id_topic int - id теми (цілочисельне значення), topic_name text - ім’я теми (рядок), id_author int - id автори (цілочисельне значення).

Аналогічним чином створимо дві інші таблиці - users (користувачі) і posts (повідомлення):

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

show databases – показати всі наявні БД;

show tables - показати список таблиць поточної БД (попередньо її треба вибрати за допомогою оператора  use);

describe ім’я_таблиці - показати опис стовпців зазначеної таблиці.

Давайте спробуємо. Дивимося всі наявні бази даних (у вас вона поки що одна - forum, у мене 30, і всі вони перераховані в стовпчик):

Тепер подивимося список таблиць БД forum (для цього її попередньо треба вибрати), не забуваємо після кожного запиту натискати Enter:

У відповіді бачимо назви наших трьох таблиць. Тепер подивимося опис стовпців, наприклад, таблиці topics:

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

А зараз ми розглянемо останній оператор - drop, він дозволяє видаляти таблиці та БД. Наприклад, давайте видалимо таблицю topics. Так як ми два кроки назад вибирали БД forum для роботи, то зараз її вибирати не треба, можна просто написати: drop table ім’я_таблиці; і натиснути Enter.

Тепер знову подивимося список таблиць нашої БД: 

Наша таблиця дійсно вилучена. Тепер давайте видалимо і саму БД forum (видаляйте, не шкодуйте, її все одно доведеться переробляти). Для цього напишемо: drop database ім’я_бази_даних; і натискаємо Enter.

І переконаєтеся в цьому, зробивши запит на всі наявні БД:

У вас, напевно, немає жодної БД, у мене їх стало 29 замість 30.

Ось ви і навчилися створювати бази даних і таблиці, видаляти їх і витягувати інформацію про наявні базах даних, таблицях і їх описах.

Тепер будемо вдосконалити таблиці для нашого форуму. Спочатку розберемо їх. І почнемо з таблиці users (користувачі). У ній у нас 4 стовпці:

id_user - цілочисельне значення, значить буде тип int, обмежимо його 10 символами - int (10). name – рядкове значення varchar, обмежимо його 20 символами - varchar(20). email - рядкове значення varchar, обмежимо його 50 символами - varchar(50). password - рядкове значення varchar, обмежимо його 15 символами - varchar(15).

Всі значення полів обов'язкові для заповнення, значить треба додати тип NOT NULL.

id_user int (10) NOT NULL

name varchar(20) NOT NULL

email varchar(50) NOT NULL

password varchar(15) NOT NULL

Перший стовпець , як ви пам'ятаєте з концептуальної моделі нашої БД , є первинним ключем (тобто його значення унікальні, і вони однозначно ідентифікують запис). Стежити за унікальністю самостійно можна, але не раціонально. Для цього в SQL є спеціальний атрибут - AUTO_INCREMENT, який при зверненні до таблиці на додавання даних вираховує максимальне значення цього стовпця, отримане значення збільшує на 1 і заносить його в стовпець. Таким чином, в цьому стовпці автоматично генерується унікальний номер, а отже тип NOT NULL зайвий. Отже, присвоїмо атрибут стовпцю з первинним ключем:

id_user int (10) AUTO_INCREMENT

name varchar(20) NOT NULL

email varchar(50) NOT NULL

password varchar(15) NOT NULL

Тепер треба вказати, що поле id_user є первинним ключем. Для цього в SQL використовується ключове слово PRIMARY KEY (), в скобочках вказується ім'я ключового поля. Внесемо зміни: id_user int (10) AUTO_INCREMENT name varchar(20) NOT NULL email varchar(50) NOT NULL password varchar(15) NOT NULL PRIMARY KEY (id_user)

Отже, таблиця готова, і її остаточний варіант виглядає так: create table users ( id_user int (10) AUTO_INCREMENT, name varchar(20) NOT NULL, email varchar(50) NOT NULL, password varchar(15) NOT NULL, PRIMARY KEY (id_user) ); 

Тепер розберемося з другої таблицею - topics (теми). Міркуючи аналогічно, маємо наступні поля:

id_topic int (10) AUTO_INCREMENT topic_name varchar(100) NOT NULL id_author int (10) NOT NULL PRIMARY KEY (id_topic)

Але в моделі нашої БД поле id_author є зовнішнім ключем, тобто воно може мати тільки ті значення, які є в полі id_user таблиці users. Для того, щоб вказати це в SQL є ключове слово FOREIGN KEY (), яке має наступний синтаксис:

FOREIGN KEY (ім’я_стовпця_котре_являється_зовнішнім_ключем) REFERENCES ім’я_таблиці_батька (ім’я _стовпця_батька);

Вкажемо, що id_author - зовнішній ключ:

id_topic int (10) AUTO_INCREMENT topic_name varchar(100) NOT NULL id_author int (10) NOT NULL PRIMARY KEY (id_topic) FOREIGN KEY (id_author) REFERENCES users (id_user)

Таблиця готова, і її остаточний варіант виглядає так: create table topics ( id_topic int (10) AUTO_INCREMENT, topic_name varchar(100) NOT NULL, id_author int (10) NOT NULL, PRIMARY KEY (id_topic), FOREIGN KEY (id_author) REFERENCES users (id_user) ); 

Залишилася остання таблиця - posts (повідомлення). Тут все аналогічно, тільки два зовнішніх ключа:  create table posts ( id_post int (10) AUTO_INCREMENT, message text NOT NULL, id_author int (10) NOT NULL, id_topic int (10) NOT NULL, PRIMARY KEY (id_post), FOREIGN KEY (id_author) REFERENCES users (id_user), FOREIGN KEY (id_topic) REFERENCES topics (id_topic) ); 

Зверніть увагу, зовнішніх ключів у таблиці може бути декілька, а первинний ключ в MySQL може бути тільки один. У попередньому прикладі ми видалили нашу БД forum, прийшов час створити її знову.

Запускаємо сервер MySQL (Пуск - Програми - MySQL - MySQL Server 5.1 - MySQL Command Line Client), вводимо пароль, створюємо БД forum (create database forum;), вибираємо її для використання (use forum;) і створюємо три наші таблиці:

Зверніть увагу, одну команду можна писати в кілька рядків, використовуючи клавішу Enter (MySQL автоматично підставляє символ нового рядка -> ), і тільки після роздільник (крапки з комою) натискання клавіші Enter приводить до виконання запиту.

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

Отже, таблиці створені, щоб переконатися в цьому згадаємо про команду show tables:

І, нарешті, подивимося структуру нашої останньої таблиці posts:

Тепер стають зрозумілі значення всіх полів структури, крім поля DEFAULT. Це поле значень за замовчуванням. Ми могли б для якого-небудь стовпця (або для всіх) вказати значення за замовчуванням. Наприклад, якби у нас було поле з назвою "Одружені\Заміжня" і типом ENUM ('так', 'ні'), то було б розумно зробити одне з значень значенням за замовчуванням. Синтаксис був би наступний: married enum ('так', 'ні') NOT NULL default('так') 

А тепер самостійно створіть БД із запропонованою структурою.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]