You are on page 1of 19

Лабораторна робота № 7

Команди DDL. Створення та редагування структури таблиць.

Мета: Засвоїти типи даних СУБД MySQL, створити базу даних та таблиці засобами команд мови SQL для
визначення структур даних, отримати навики при використанні команд CREATE, ALTER і DROP та їх опцій.

МЕТОДИЧНІ ВКАЗІВКИ
Команди SQL будемо вивчати, використовуючи СУБД MySQL. Дистрибутив серверу MySQL можна
завантажити за посиланням https://dev.mysql.com/downloads/mysql/
В якості редактора для команд SQL будемо використовуати MySQL Workbench, дистрибутив якого можна
завантажити тут: https://dev.mysql.com/downloads/workbench/
SQL (англ. Structured query language — мова структурованих запитів) — декларативна мова
програмування для взаємодії користувача з базами даних, що застосовується для формування запитів,
оновлення і керування реляційними БД, створення схеми бази даних та її модифікації, системи контролю
за доступом до бази даних.
Сама по собі SQL не є ані системою керування базами даних, ані окремим програмним продуктом.
SQL може формувати інтерактивні запити або, бувши вбудованою в прикладні програми, виступати як
інструкції для керування даними. Крім цього, стандарт SQL містить функції для визначення зміни, перевірки
та захисту даних.
Усі SQL-оператори діляться на такі категорії:
• DDL (Data Definition Language) — робота зі структурою бази,
• DML (Data Manipulation Language) — робота з рядками таблиць,
• DCL (Data Control Language) — робота з правами,
• TCL (Transaction Control Language) — робота з транзакціями.
Оператори DDL дозволяють працювати з визначенням даних. До них відносяться такі команди:
• створення об'єктів (CREATE);
• зміна (редагування) об'єктів (ALTER);
• вилучення об'єктів (DROP).
Для визначення даних необхідно вказувати їх імена і типи. Розглянемо основні типи даних в SQL.
Типи даних
Числові типи даних
Тип Опис
TINYINT(size) Цілий від -128 до 127 . Від 0 до 255 UNSIGNED.
SMALLINT(size) Від -32768 до 32767. Від 0 до 65535 UNSIGNED.
MEDIUMINT(size) Від -8388608 до 8388607. Від 0 до 16777215 UNSIGNED.
INT(size) Від -2147483648 до 2147483647. Від 0 до 4294967295 UNSIGNED.
INTEGER(size) Синонім до INT
BIGINT(size) Від -9223372036854775808 до 9223372036854775807. Від 0 до
18446744073709551615 UNSIGNED.
FLOAT(size,d) Число з плаваючою крапкою. Точність (параметр d) буде <=24
DOUBLE(size,d) Точніше число з плаваючою крапкою
REAL(size,d) Синонім до DOUBLE
DECIMAL(size,d) DOUBLE, що зберігається як рядок з фіксованою крапкою.
NUMERIC(size,d) Синонім до DECIMAL
Максимальне число цифр задається в параметрі size. Максимальне число цифр після десяткової крапки
задається в параметрі d.
Числові константи в командах SQL задаються аналогічно іншим мовам програмування.
Приклад 1.
15 (ціле число) 18.7 (дійсне) -35 (знакове) 0xFF (шістнадцядкове)
Тип BOOL - синонім до TINYINT, а константи TRUE та FALSE - до 1 та 0 відповідно.

Символьні типи даних


Тип Опис
CHAR(size) Містить рядок фіксованої довжини (може містити букви, цифри та інші символи).
Фіксована довжина задається в дужках. Може зберігати до 255 символів
CHAR Це синонім до CHAR(1).
VARCHAR(size) Містить рядок змінної довжини. Найбільша довжина задається в дужках. Може зберігати
до 255 символів. Примітка: Якщо ви покладете туди значення більше за 255, тип буде
перетворений на TEXT
TINYTEXT Рядок з найбільшою довжиною 255 символів
TEXT Зберігає рядок з найдовшою довжиною 65 535 символів
BLOB Великий двійковий об'єкт (Binary Large OBject). Зберігає до 65 535 байт даних
MEDIUMTEXT Зберігає рядок з максимальною довжиною в 16 777 215 символів
MEDIUMBLOB Великий двійковий об'єкт. 16 Мегабайт даних
LONGTEXT Рядок з найбільшою довжиною в 4 294 967 295 символів
LONGBLOB Великий двійковий об'єкт. 4 Гігабайти даниx
ENUM ( 'значення1' , 'значення2', ...)
Дозволяє ввести список можливих значень. Можна перелічити до 65535 різних значень
типу. Якщо значення, що вставляють в поле, не буде належати списку, виводиться
повідомлення про помилку.
Зауваження: Значення будуть відсортовані в тому порядку, в якому ви їх запишете.
Можливі значення вводяться в такому форматі: ENUM( 'X', 'Y', 'Z')
SET ( 'значення1', 'значення2', ...)
Подібно до ENUM окрім того, що SET може містити до 64 значень списку, і може зберігати
більше одного вибору, які задаються через кому.
Символьні константи заключаються в одинарні або подвійні лапки. Є можливість використання
спецсимволів у рядках, дуже схожих на спецсимволи в С++.
Приклад 2.
‘Hello!‘ “Hello!” “ \’Hello!\’ ” “Hello, \n world!”
Дати і часу
Тип Опис
DATE[(size)] Дата. Формат: YYYY-MM-DD. Зауваження: Підтримується діапазон від '1000-01-01' до
'9999-12-31'
DATETIME[(size)] Формат: YYYY-MM-DD HH:MM:SS.
Зауваження: Підтримується діапазон від '1000-01-01 00:00:00' до '9999-12-31 23:59:59'
TIMESTAMP[(size)] Часова мітка. Значення TIMESTAMP зберігаються як кількість секунд з початку епохи Unix
('1970-01-01 00:00:00' UTC). Формат: YYYY-MM-DD HH:MM:SS.
Зауваження: Підтримується діапазон від '1970-01-01 00:00:01' UTC до '2038-01-09
03:14:07' UTC
TIME[(size)] Час. Формат: HH:MM:SS
Зауваження: Підтримується діапазон від '-838:59:59' до '838:59:59'
YEAR[(2|4)] Рік в двоцифровому або чотирицифровому форматі.
Зауваження:
Значення, що дозволені в чотирицифровому форматі: від 1901 до 2155.
Значення дозволені в двоцифровому форматі: від 70 до 69, що відповідає 1970 та 2069.
Константи дати і часу в діалекті SQL для MySQL представляються рядками.
Приклад 3.
‘2021-02-17‘ “12:35” ’2021’ “2005.12.23 22:12:11”
Тепер розглянемо безпосередньо команди для визначення DDL.
Створення бази даних

CREATE DATABASE [IF NOT EXISTS] <назва БД>


Команда призначена для створення бази даних з вказаним ім'ям. Якщо БД з таким ім'ям вже існує і
не вказано параметр IF NOT EXISTS, то виникне помилка виконання команди.
Бази даних в MySql реалізуються як директорії, що містять файли, які відповідають таблицям в базі
даних. Оскільки при першому створенні база даних не містить ще ніяких таблиць, то команда CREATE
DATABASE створює тільки відповідну піддиректорію в директоріях даних MySQL.
Приклад 4
create database test;
create database if not exists myDB;
Вилучення бази даних

DROP DATABASE [IF EXISTS] <назва БД>


Команда DROP DATABASE вилучає всі таблиці у вказаній базі даних і саму базу.
Приклад 5
drop database test;
drop database if not exists myDB;
Створення таблиці (визначення її структури)
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <назва таблиці>
[(<визначення полів>,<визначення обмежень>)]
[<опції таблиці>] [<SELECT-вираз>]
Команда призначена для створення таблиці, визначення її полів і обмежень. У відповідній
директорії бази даних створюється відповідний файл з ім'ям, що співпадає з іменем таблиці. Розширення
файлу залежить від типу таблиці.
При створенні таблиці можна використовувати ключове слово TEMPORARY. Тимчасова таблиця
автоматично видаляється по завершенню з’єднання, а її назва дійсна тільки протягом даного з'єднання.

<визначення поля>: <назва поля> <тип поля> [<обмеження поля>]


<Обмеження поля> діють тільки на вказане поле і можуть набувати таких значень :
NOT NULL | NULL чи обов'язкове введення значення в дане поле, чи ні
DEFAULT <значення за замовчуванням> встановлення значення за замовчуванням
AUTO_INCREMENT дане поле буде полем-лічильником
CHECK (<вираз>) встановлення умови для перевірки значень даного поля
PRIMARY KEY поле буде первинним ключем
KEY дане поле буде ключовим
Приклад 6
create table product (id int, name_prod varchar(100), price float, count int check (count>=0) , date_suplly date);
create table type_product (id int auto_increment primary key, name_type varchar(20));
create table supplier (id int auto_increment primary key,
name_supplier varchar(100),
phone varchar(13) default "+380501111111");
<Визначення обмежень> визначають обмеження на таблицю і можуть мати такі опції:
PRIMARY KEY (<назва поля>,...) визначення первинного ключа в таблиці
KEY [<назва індексу>] (<назва поля>,...) визначення ключового поля в таблиці
INDEX [<назва індексу>] (<назва поля>,...) аналогічно опції KEY
UNIQUE [INDEX] [<назва індексу>] (<назва поля>,...) визначення унікального ключового поля
FULLTEXT [INDEX] [<назва індексу>] (<назва поля>,...) визначення індексу по повному співпаданню
<визначення обмежень CONSTRAINT> визначення зовнішнього ключа

<Визначення обмежень CONSTRAINT> має такий формат:


[CONSTRAINT <назва обмеження>]
FOREIGN KEY (<поле-зовнішній ключ>)
REFERENCES <головна таблиця> (<первинний ключ головної таблиці>)
[ON DELETE <дія>]
[ON UPDATE <дія>]
Можлива одна з <дій>:
CASCADE автоматично вилучає чи змінює рядки в підпорядкованій таблиці при вилученні чи
оновлені зв'язаних рядків в головній таблиці.
SET NULL при вилученні чи оновлені зв'язаних рядків в головній таблиці встановлює для
стовпця зовнішнього ключа значення NULL.
RESTRICT відміняє вилучення чи зміну рядків головної таблиці при наявності відповідних
записів у підпорядкованій таблиці.
NO ACTION те саме, що й RESTRICT.
SET DEFAULT при вилученні чи оновлені зв'язаних рядків в головній таблиці встановлює для
стовпця зовнішнього ключа значення за замовчуванням, яке задається атрибутом
DEFAULT.
Приклад 7.

create table type_product (id int auto_increment primary key, name_type varchar(20));
create table product ( id int,
name_prod varchar(100),
type_prod int,
price float,
count int,
date_suplly date,
foreign key (type_prod) references type_product(id) );

Редагування структури таблиці

ALTER TABLE <назва таблиці> <зміни> [, <зміни> ...]


Команда призначена для зміни структури таблиці. Можна добавляти, змінювати або вилучати поля
таблиці, створювати або вилучати ключі, а також перейменовувати таблицю і змінювати її опції.
<зміни>:
ADD [COLUMN] <визначення поля> [FIRST | AFTER <назва поля>]
добавлення нового поля в таблицю
ALTER [COLUMN] <назва поля> { SET DEFAULT <значення за замовчуванням> | DROP DEFAULT }
встановлення нового значення за замовчуванням або відміна встановленого раніше
CHANGE [COLUMN] <стара назва поля> <визначення поля> [FIRST | AFTER <назва поля>]
заміна старого поля новим з новим його визначенням
MODIFY [COLUMN] <назва поля> <нове визначення поля> [FIRST | AFTER <назва поля>]
редагування визначення вказаного поля
DROP [COLUMN] <назва поля>
вилучення вказаного поля
ADD INDEX [<назва індексу>] (<назва поля>,...)
добавлення індексного поля
ADD PRIMARY KEY (<назва поля>,...)
добавлення первинного ключа
ADD UNIQUE [<назва індексу>] (<назва поля>,...)
добавлення унікального індексу
ADD FULLTEXT [<назва обмеження>] (<назва поля>,...)
добавлення індексу по повному тексту
ADD [CONSTRAINT <назва обмеження>] FOREIGN KEY [<назва обмеження>] (<назва поля>,...)
[reference_definition]
добавлення нового обмеження таблиці CONSTRAINT
DROP PRIMARY KEY
вилучення первинного ключа
DROP INDEX <назва індексу>
вилучення вказаного індексу
DISABLE KEYS
заборонити доступ до індексів
ENABLE KEYS
надати доступ до індексів
RENAME [TO] <нова назва таблиці>
перейменувати таблицю
ORDER BY <назва поля>
встановити поле для сортування даних в таблиці
<опції таблиці>
змінити опції таблиці
Приклад 8.
alter table product add discount int check (discount in (5, 10, 20, 30, 50));
alter table supplier alter phone drop default;
alter table product modify id int auto_increment primary key;
alter table supplier change phone phone varchar(15) default "+38(050)1111111";
alter table supplier add primary key (id);
alter table product add foreign key (type_prod) references type_product(id);
alter table product add supplier int, add constraint suppl_fk foreign key (supplier) references supplier(id);

Вилучення таблиці
DROP TABLE [IF EXISTS] <назва таблиці1> [, <назва таблиці2>,...]
Команда призначена для вилучення таблиць. При цьому відповідні файли вилучаються з директорії
бази даних.

Перейменування таблиці
RENAME TABLE <назва таблиці1> TO <нова назва таблиці1>
[, <назва таблиці2> TO <нова назва таблиці2>,...]
Команда призначена для перейменування таблиці.
Створення індексу
CREATE [UNIQUE|FULLTEXT] INDEX <назва індексу>
ON <назва таблиці> (<назва поля>[<кількість символів>],... )
Команда призначена для створення індексів (індексних файлів) для вказаної таблиці по вказаному
полю. Для символьних полів можна створювати індекси не по всьому полю, а по вказаній кількості перших
символів.
Вилучення індексу

DROP INDEX <назва індексу> ON <назва таблиці>


Команда призначена для вилучення індексів (індексних файлів) для вказаної таблиці
ХІД РОБОТИ
1. Створити базу даних.
2. Створити таблиці для обраної предметної області.
2.1. Визначити поля таблиці і їх типи.
2.2. Визначити обмеження для полів (використати опції NOT NULL, DEFAULT, CHECK).
3. Визначити та створити обмеження для таблиць.
3.1. Визначити первинні ключі.
3.2. Визначити зовнішні ключі, врахувавши правила збереження цілісності даних.
4. Створити індексні файли до кожної з таблиць.
5. Ввести дані в таблиці (не менше 10 записів в кожну).
6. Відсортувати інформацію в таблицях.
ВАРІАНТИ ЗАВДАНЬ
Варіант 1. База даних “Car_rental”

Таблиця “Car”
• номерний знак
• код марка/модель авто
• тип кузова
• тип коробки передач
• тип пального
• колір
• рік випуску
• загальний стан
• ціна оренди за добу

Таблиця “Brand_Model”
• код марка/модель авто
• марка авто
• модель авто

Таблиця “Client”
• код клієнта
• прізвище
• ім'я
• посвідчення водія
• категорія
• email
• контактний телефон
• країна проживання

Таблиця “Rental_Detail”
• номерний знак авто
• клієнт
• дата взяття в оренду
• дата повернення
• оплата
• в якому стані взяв в оренду
• в якому стані повернув
Варіант 2. База даних “Hotel”

Таблиця “Room”
• код номеру
• тип номеру
• загальна площа
• максимальна кількість осіб
• ціна за добу
• наявність знижки

Таблиця “Room_type”
• код типу номеру
• назва
• опис

Таблиця “Guest”
• id клієнта
• прізвище
• ім'я
• дата народження
• країна
• місто
• email
• контактний телефон
• посвідчення особи

Таблиця “Reservation”
• код
• номер
• клієнт
• дата бронювання
• дата заїзду
• дата виїзду
• кількість дорослих
• кількість дітей
• оплата
Варіант 3. База даних “Foreign_language_courses”

Таблиця “Course”
• id курсу
• назва
• мова
• вікова група студентів
• викладач
• тривалість одного заняття
• рік вивчення

Таблиця “Teacher”
• id викладача
• прізвище
• ім'я
• по батькові
• дата народження
• сертифікати
• контактний телефон
• дата початку роботи на курсах

Таблиця “Student”
• id студента
• прізвище
• ім'я
• дата народження
• email
• контактний телефон

Таблиця “Group”
• курс
• студент

Таблиця “Course_Shedule”
• курс
• день тижня
• час проведення заняття
Варіант 4. База даних “Pharmacy”

Таблиця “Medicament”
• код ліків
• назва
• форма випуску (таблетки, капсули, суспензія тощо)
• категорія за призначенням
• діюча речовина
• виробник
• постачальник
• ціна
• кількість

Таблиця “Producer”
• код виробника
• назва
• країна

Таблиця “Supplier”
• код постачальника
• назва
• контактна особа
• контактний телефон
• договір

Таблиця “Supply_Detail”
• код поставки
• дата поставки
• постачальник

Таблиця “Order_Item”
• код поставки
• код ліків
• кількість
Варіант 5. База даних “Clothing_store”

Таблиця “Product”
• код продукту
• назва
• категорія продукту
• ціна
• кількість
• бренд одягу
• постачальник
• наявність знижки

Таблиця “Category”
• код категорії
• назва

Таблиця “Order_Detail”
• код замовлення
• дата замовлення
• клієнт
• ознака виконання замовлення

Таблиця “Order_Item”
• код замовлення
• код товару
• кількість

Таблиця “Client”
• код клієнта
• логін
• пароль
• email
• прізвище
• ім'я
• контактний телефон
• адреса доставки
Варіант 6. База даних “Cinema”

Таблиця “Movie”
• id фільму
• назва фільму
• режисер
• рік випуску
• акторський склад
• жанр
• опис

Таблиця “Actors”
• id актора
• прізвище
• ім'я
• дата народження
• місце народження

Таблиця “Actor_Movie”
• id актора
• id фільму

Таблиця “Seance”
• код сеансу
• фільм
• дата сеансу
• зал
• кількість місць
• вартість квитка

Таблиця “Ticket”
• id
• сеанс
• прізвище та ім'я відвідувача
• ознака бронювання
• ознака купівлі
Варіант 7. База даних “Beauty_salon”

Таблиця “Service”
• код послуги
• назва
• вартість
• тривалість
• опис

Таблиця “Employee”
• id майстра
• прізвище
• ім'я
• дата народження
• номер телефону
• кваліфікація

Таблиця “Employee_Services”
• код
• послуга
• майстер

Таблиця “Client”
• код
• прізвище
• ім'я
• контактний телефон
• інші дані
• дата першого відвідування

Таблиця “Appointment”
• код
• код клієнта
• код послуги майстра
• дата відвідування
• час відвідування
• ознака відвідування
Варіант 8. База даних “Airport”

Таблиця “Airports”
• код аеропорту
• назва
• місто
• країна

Таблиця “Airline”
• код
• назва авіакомпанії
• адреса офісу
• контактний телефон

Таблиця “Flight_Info”
• номер рейсу
• літак
• авіакомпанія
• аеропорт вильоту
• аеропорт прильоту
• дата
• час вильоту
• тривалість польоту
• кількість місць економ-класу
• кількість місць бізнес-класу
• ціна квитка економ-класу
• ціна квитка бізнес-класу

Таблиця “Ticket”
• номер квитка
• номер рейсу
• клас квитка (економ або бізнес)
• відомості про пасажира
• пільги (немовлята, діти до 12 років)
Варіант 9. База даних “Students”

Таблиця “Student”
• номер залікової книжки
• прізвище
• ім’я
• по батькові
• дата народження
• паспортні дані
• середній бал атестату
• інформація про батьків
• контактний телефон

Таблиця “Speciality”
• код спеціальності
• назва

Таблиця “Teacher”
• код вчителя
• прізвище
• ім'я
• по батькові
• дата народження
• напрямок предметів, які викладає (філологічні, математика, комп'ютерні науки)

Таблиця “Group”
• код групи
• назва
• куратор
• курс
• спеціальність

Таблиця “Student_Group”
• код групи
• код студента
Варіант 10. База даних “Shop”

Таблиця “Product”
• код продукту
• назва
• категорія продукту
• ціна
• кількість
• постачальник
• остання дата поставки
• наявність знижки

Таблиця “Category”
• код категорії
• назва

Таблиця “Supplier”
• код постачальника
• назва
• контактна особа
• контактний телефон
• договір

Таблиця “Order_Detail”
• код продажу (номер чеку)
• дата продажу
• час продажу

Таблиця “Order_Item”
• код
• код продажу
• код товару
• кількість
Варіант 11. База даних “Railway_station”

Таблиця “Train”
• номер потяга
• назва
• пункт відправки (станція)
• пункт призначення (станція)
• кількість місць типу А
• кількість місць типу Б
• ціна квитка для типу А
• ціна квитка для типу Б

Таблиця “Station”
• код станції
• назва
• місто
• область
• країна

Таблиця “Train_schedule”
• номер потяга
• час відправлення
• час прибуття

Таблиця “Person”
• паспортні дані пасажира
• прізвище
• ім'я
• по батькові
• дата народження

Таблиця “Reservation”
• номер квитка
• дата
• номер потяга
• пасажир
Варіант 12. База даних “Library”

Таблиця “Book”
• код книжки
• назва книжки
• автор
• жанр
• видавництво
• рік випуску
• кількість примірників
• ціна

Таблиця “Genre”
• код
• назва

Таблиця “Publisher”
• код видавництва
• назва
• місто
• контактна особа
• контактний телефон

Таблиця “Person”
• код читацького квитка
• прізвище
• ім'я
• по батькові
• контактний телефон
• дата реєстрації в бібліотеці

Таблиця “Book_reservation”
• дата взяття книжки
• книжка
• абонент
• дата повернення книжки

You might also like