ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.08.2020
Просмотров: 1880
Скачиваний: 3
2 СИСТЕМА керування БАЗАМИ ДАНИХ MYSQL
2.1 Загальні положення
MySQL – невеликий, компактний багатопоточний сервер баз даних. MySQL характеризується великою швидкістю, стійкістю й легкістю у використанні. MySQL є ідеальним рішенням для малих і середніх сайтів. Вихідні тексти сервера компілюються на різних платформах. Найбільш повно можливості сервера проявляються на Unix-Серверах, де є підтримка багатопоточності, що дає значний приріст продуктивності.
Мова серверних скприптів PHP має засоби взаємодії з MySQL. Важливим фактором є безкоштовність MySQL. Система розповсюджується на умовах загальної ліцензії GNU (GPL, GNU Public License). MySQL відноситься до категорії реляційних БД.
Подальше викладення матеріалу передбачає, що студенти вже знайомі з організацією та ключовими поняттями реляційних баз даних.
У реляційних БД дані зібрані в таблиці, які у свою чергу складаються зі стовпців і рядків, на перетині яких розташовані відповідні значення. Запит до таких баз даних повертає таблицю, що повторно може брати участь у наступному запиті. Дані в одних таблицях, як правило, пов'язані з даними інших таблиць, звідки й походить назва "реляційні".
Короткий перелік можливостей MySQL.
-
Підтримується необмежена кількість користувачів, що одночасно працюють із базою даних.
-
Кількість рядків у таблицях може досягати 50 млн.
-
Швидке виконання команд. MySQL - один з найшвидших серверів.
-
Проста й ефективна система безпеки.
-
Підтримується структурована мова запитів (SQL).
2.2 Установка MySQL
Якщо ви скористалися пакетом DENWER, то встановлювати додатково MySQL буде не потрібно, оскільки DENWER уже містить у своєму складі MySQL і всі необхідні компоненти та настройки, тому даний розділ можна пропустити.
Для самостійної установки необхідно, насамперед, завантажити дистрибутив MySQL із сайту http://www.mysql.com або http://www.mysql.ru. Сервер MySQL можна встановлювати як на UNIX платформу, так і під Windows. Розглянемо процес установки під Windows.
Завантажений архів дистрибутива потрібно розархівувати і запустити файл setup.exe. Запускається Майстер установки. У вікні “Setup Type” (тип установки) вибираємо “Custom” і натискаємо “Next”. У наступному вікні вибираємо каталог установки . На наступному етапі пропонується створити новий обліковий запис на сайті mysql.com, натискаємо Skip (пропустити). Після закінчення установки пропонується настроїти MySQL сервер, відзначаємо чекбокс “Configure the MySQL” і натискаємо “Finish”. Запускається майстер конфігурації. У вікні, що з'явилося, відзначаємо “Standard Configuration”. На наступному етапі встановлюємо прапорець “Instal As Windows Servise”, якщо хочемо, щоб сервер запускався автоматично при завантаженні Windows. У наступному вікні натискаємо кнопку “Execute”. Конфігурація закінчена, і всі настройки внесені у файл MY.INI.
У папці C:\MYSQL\BIN\ розташовуються утиліти, для роботи із БД. Утиліта MYSQLD.EXE призначена для запуску сервера – це перше, що потрібно зробити для роботи з MySQL.
Для запуску інших утиліт перейдемо в режим командного рядка. Для цього натискаємо «Пуск», потім «Виконати» і у вікні, що з'явилося, уводимо команду “cmd”, потім ОК. Уведемо “cd\mysql\bin” у командному рядку вікна, що з'явилося, і натискаємо ENTER. Тепер можна запускати утиліти в командному рядку.
Утиліта mysqlshow дозволяє переглянути список баз даних на сервері. Після установки MySQL на сервері буде дві БД – mysql і test.
Для перегляду переліку таблиць, наприклад, у БД test, набираємо в командному рядку mysqlshow test.
Утиліта mysq.exe призначена для запуску консолі (командного рядка MySQL). Запускаємо її й уводимо команду help. Буде виведений список доступних команд. Кожна команда повинна закінчуватися символом крапки з комою (;). Для виходу з режиму консолі треба набрати команду exit.
Утиліта mysqladmin.exe надає адміністративні функції сервера. Повний список команд можна переглянути, запустивши утиліту без параметрів. Ось деякі з них:
-
create ім'я БД - створити базу даних;
-
drop ім'я БД - видалити базу даних;
-
reload - запустити знову сервер;
-
shutdown - зупинити сервер;
-
status - інформація про стан сервера.
Утиліта mysqldump.exe призначена для резервного копіювання бази даних або її таблиці. Наприклад, якщо набрати в командному рядку mysqldump test > dump.txt, одержимо в каталозі C:\MYSQL\BIN\ файл dump.txt, що містить структуру й дані БД test. Цей файл тепер можна перенести на інший комп’ютер для створення на ньому такої ж БД. Для цього треба набрати команди
mysqladmin create ім'я БД
mysql ім'я БД < ім'я файлу із БД.
Створювати й редагувати бази даних можна також у режимі консолі. Наприклад, щоб створити базу даних library, треба в командному рядку набрати
mysql > create database library;
Інші команди по управлінню БД будуть розглянуті в наступних розділах.
Існують спеціальні програми, що надають зручний інтерфейс для створення та керування БД. Найбільш відома з них phpMyAdmin буде розглянута нижче. Пакет DENWER містить у своєму складі phpMyAdmin.
2.3 Поля і їхні типи в MySQL
База даних з точки зору MySQL (і деяких інших СУБД) – це звичайний каталог, що містить бінарні файли певного формату – таблиці. Таблиці складаються із записів, а записи, у свою чергу, складаються з полів. Поле має два атрибути – ім'я та тип.
Тип поля може бути:
-
числовим цілим;
-
числовим дійсним;
-
рядковим;
-
бінарним;
-
дата й час;
-
переліком і множиною.
Цілочисельні типи даних
Таблиця 2.1
|
Тип |
Діапазон |
|
TINYINT |
-128...+127 |
|
SMALLINT |
-32768...+32767 |
|
MEDIUMINT |
-8 388 608...+8 388 607 |
|
INT |
-2 147 483 648...+2 147 483 647 |
|
BIGINT |
-9 223 372 036 854 775 808...+9 223 372 036 854 775 807 |
Дійсні числа
Числові дійсні типи записуються у вигляді:
ТИП (ДОВЖИНА, ЗНАКИ) [UNSIGNED]
Тут і надалі у квадратних дужках необов'язкові параметри. ДОВЖИНА - це кількість позицій, у яких буде розташоване число, а ЗНАКИ – це кількість знаків після десяткової крапки, які будуть ураховуватися. Якщо присутній модифікатор UNSIGNED, знак числа враховуватися не буде.
Таблиця 2.2
|
Тип |
Опис |
|
|
FLOAT |
Невелика точність |
|
|
DOUBLE |
Подвійна точність |
|
|
REAL |
Те ж, що й DOUBLE |
|
|
DECIMAL |
Дробове число, що зберігається у вигляді рядка |
|
|
NUMERIC |
Те ж, що й DECIMAL |
|
Рядкові типи
Будь-який рядок – це масив символів. У більшості випадків застосовується тип VARCHAR або просто CHAR, що дозволяє зберігати рядки, що містять до 255 символів. У дужках після типу вказується довжина рядка:
VARCHAR(48);
CHAR(73);
Якщо 255 символів для вашого завдання недостатньо, можна використовувати інші типи, наприклад, TEXT.
Таблиця 2.3
|
Тип |
Опис |
|
TINYTEXT |
Максимальна довжина 255 символів |
|
TEXT |
Максимальна довжина 65535 символів (64 Кб) |
|
MEDIUMTEXT |
Максимальна довжина 16 777 215 символів |
|
LONGTEXT |
Максимальна довжина 4 294 967 295 символів |
Бінарні типи даних
Бінарні типи даних також можна використовувати для зберігання тексту. У такому випадку при пошуку буде враховуватися регістр символів. До того ж, будь-який текстовий тип можна перетворити в бінарний, указавши модифікатор BINARY:
VARCHAR(30) BINARY;
Таблиця 2.4
|
Тип |
Опис |
|
TINYBLOB |
Максимум 255 символів |
|
BLOB |
Максимум 65535 символів |
|
MEDIUMBLOB |
Максимум 16 777 215 символів |
|
LONGBLOB |
Максимум 4 294 967 295 |
Дата та час
Таблиця 2.5
|
Тип |
Опис |
|
DATE |
Дата у форматі РРР-ММ-ДД |
|
TIME |
Час у форматі ГГ:ХХ:СС |
|
TIMESTAMP |
Дата й час у форматі timestamp, виводиться у вигляді РРРРММДДГГХХСС |
|
DATETIME |
Дата й час у форматі РРРР-ММ-ДД-ГГ:ХХ:СС |
2.4 Оператори та команди MySQL
Структурована мова запитів SQL дозволяє робити різні операції з базами даних: створювати таблиці, додавати, оновлювати й видаляти з них дані, створювати запити і т.ін. Надалі ми послідовно розглянемо всі ці оператори.
Примітка: Команди SQL не чутливі до регістра, але традиційно вони набираються малими буквами.
Створення таблиць. Оператор CREATE
Створити таблицю через SQL-Запит дозволяє оператор CREATE. Його синтаксис:
CREATE TABLE Ім'я_таблиці(Ім'я_поля1 Тип Модифікатор,
Ім'я_поляN Тип Модифікатор
[первинний ключ]
[зовнішній ключ])
Як модифікатори можна використовувати такі значення:
NOT NULL – поле не може містити невизначеного значення (NULL), тобто поле повинне бути явно ініціалізоване;
PRIMARY KEY – поле буде первинним ключем (ідентифікатором запису), за яким можна однозначно ідентифікувати запис;
AUTO_INCREMENT – при додаванні нового запису значення цього поля буде автоматично збільшено на одиницю, тому в таблиці не буде двох записів з однаковим значенням цього поля;
DEFAULT – задає значення, що буде використане за замовчуванням, якщо при додаванні запису поле не буде ініціалізоване явно.
Створимо для прикладу таблицю " clients ":
CREATE
TABLE clients
(nk INT NOT
NULL,
fio VARCHAr(40)
NOT NULL,
addr VARCHAR(30)
NOT NULL,
city
VARCHAR(15) NOT NULL,
phone VARCHAR(11)
,
gr
INT NOT NULL);
Таблиця clients містить поля nk (номер клієнта), fio (Прізвище, Ім'я, По батькові), addr (Адреса), city (Місто), phone (Телефон) і gr (Рік народження). Усі ці поля не можуть містити порожнього значення (NOT NULL).
Додавання даних у таблицю. Оператор INSERT
Для додавання записів використовується оператор INSERT:
INSERT INTO Ім'я_таблиці [(Список полів)]
VALUES (Список значень);
Приклад:
INSERT INTO clients VALUES (4, 'Лосєв Л.Л.', 'Нова 1', 'Запоріжжя', '1234321',1980);
Якщо заповнюються всі поля, то їхні назви можна не вказувати.
Оновлення записів. Оператор UPDATE
Синтаксис оператора UPDATE, що використовується для оновлення записів, виглядає так:
UPDATE Ім'я_таблиці
SET Поле1 = Значення1, ... , ПолеN = ЗначенняN
[WHERE Умова];
Приклад:
UPDATE clients SET city = 'Київ' WHERE nk = 1;
Цей запит слід розуміти так: знайти запис, для якого поле nk = 1, і встановити в ньому значення city ="Київ".
Видалення записів. Оператор DELETE
Якщо нам необхідно видалити всіх клієнтів, номера яких перевищують 3, створюємо такий запит:
DELETE FROM clients WHERE nk> 3;
За допомогою оператора DELETE можна видалити всі записи таблиці, вказавши умову, що підійде для всіх записів, наприклад:
DELETE FROM clients;
Відбір записів. Оператор SELECT
Оператор SELECT дозволяє вибирати інформацію із БД відповідно до визначених критеріїв. Синтаксис оператора:
SELECT [DISTINCT|ALL] {*| [поле1 AS псевдонім] [,..., полеN AS псевдонім]}
FROM Ім'я_таблиці1 [,..., Ім'я_таблиціN]
[WHERE умова]
[GROUP BY список полів] [HAVING умова]
[ORDER BY список полів]
На наступних прикладах розглянемо використання оператора SELECT для відбору записів з таблиці clients.
SELECT * FROM clients;
За цією командою вибираються всі записи з таблиці clients. У результаті одержимо таку відповідь сервера:
Таблиця 2.6
|
fio |
addr |
city |
phone |
gr |
|
Козлов К.К. |
Вокзальна 3 |
Київ |
234321 |
975 |
|
Баранов Б.Б. |
Леніна 3 |
Запоріжжя |
0616762 |
990 |
|
Биков Б.Б.. |
Миру 2 |
Донецьк |
456789 |
985 |
|
Лосєв Л.Л. |
Нова 1 |
Запоріжжя |
1234321 |
980 |
Припустимо, потрібно вивести тільки прізвище й номер телефона клієнта, тоді використовуємо такий запит:
SELECT fio, phone FROM clients;
Якщо потрібно вивести прізвища й адреси клієнтів, які народилися після 1980 року, скористаємося таким запитом:
SELECT fio, addr FROM clients WHERE GR > 1980;
Ви можете використовувати такі оператори відношень: <, >, =, <>, <=, >= і логічні операції AND, OR, XOR, NOT.
Вибір клієнтів, які народилися в 1980 і 1985 роках:
SELECT fio FROM clients WHERE gr IN( 1980,1985);
Вибір клієнтів, рік народження яких не 1981 і не 1995:
SELECT fio FROM clients WHERE gr NOT IN( 1981,1995);
Вибір клієнтів, які проживають у Києві або Донецьку:
SELECT fio FROM clients WHERE addr=”Київ” OR addr= “Донецьк” ;
Відбір клієнтів, які народилися між 1979 і 1993 роком:
SELECT fio FROM WHERE gr BETWEEN 1979 AND 1993;
Вибір клієнтів, які проживають у Запоріжжі й народилися до 1970 року або після 1990:
SELECT fio FROM clients WHERE addr=”Запоріжжя” AND gr NOT BETWEEN 1970 AND 1990;
Вибираємо з таблиці clients три записи, починаючи із другого:
SELECT * FROM clients LIMIT 2,3;
При формуванні умови відбору можна використовувати шаблони, при цьому знак “_” означає один будь-який символ, а “%” - будь-яку кількість будь-яких символів. Наприклад, наступний запит відбирає клієнтів, прізвища яких починаються на букву “К”, а закінчуються на “о”:
SELECT FIO FROM clients WHERE fio LIKE “K%о ____”;
Більш складні шаблони можна побудувати за допомогою регулярних виразів (REGEXP) (див. довідкову літературу).
Сортування записів
Для впорядкування виведеної інформації по зростанню або по спаданню використовують команду ORDER. За замовчуванням впорядкування виконується по зростанню (ASC). Для сортування по спаданню додаємо DESC. Наприклад:
SELECT fio, addr FROM clients ORDER BY fio DESC
Внутрішні функції MIN, MAX, AVG, SUM
При роботі з оператором SELECT доступні досить корисні внутрішні функції MySQL, що обчислюють кількість елементів (COUNT), суму елементів (SUM), максимальне й мінімальне значення (MAX і MIN), а також середнє значення (AVG).
Наступні оператори виведуть, відповідно, кількість записів у таблиці clients та наймолодшого клієнта:
SELECT COUNT(*) FROM clients;
SELECT MAX(gr) FROM clients;
Групування записів
Створимо ще одну таблицю orders, у якій зберігається інформація про замовлення: nz – номер замовлення, date – дата замовлення, nk – номер клієнта, nt – номер товару, quantity- кількість одиниць замовленого товару, amount – вартість замовлення.
CREATE TABLE orders ( nz INT NOT NULL, date DATE NOT NULL, nk INT NOT NULL, nt INT NOT NULL, quantity DOUBLE(9,2) NOT NULL, amount DOUBLE(9,2) NOT NULL );
Якщо в різних таблицях є поля з однаковими іменами, то в багатотабличних запитах перед ім'ям поля потрібно вказувати ім'я таблиці, наприклад, cliеnts.nk, orders.nk.
Оператор SELECT дозволяє групувати значення в запитах. Наприклад, клієнт Козлов (nk=1) кілька разів замовляв якийсь товар. Виходить, його номер зустрічається в таблиці orders кілька разів. Інший клієнт також міг зробити кілька замовлень. Ми можемо згрупувати всі записи по полю nk (номер клієнта), а потім вивести суму замовлення кожного клієнта. Псевдонім стовпця для загальної суми замовлення – totalsum.
SELECT
clients.fio,
SUM(orders.amount)
AS totalsum
FROM clients,
orders
WHERE clients.nk
= orders.
nk
GROUP BY orders.nk;
Групування виконує оператор GROUP BY, що є частиною оператора SELECT. Оператор GROUP BY можна обмежити за допомогою HAVING. HAVING можна вважати аналогом WHERE, але тільки для GROUP BY:
HAVING <умова>
Наприклад, нас цікавлять тільки клієнти, які замовили товарів на загальну суму, що перевищує 1500:
SELECT
clients.fio,
SUM(ORDERS.AMOUNT) AS totalsum
FROM clients,
orders
WHERE
clients.nk
= orders.nk
GROUP BY orders.nk
HAVING totalsum
>
1500;
Ключі
Припустимо, що хтось додав у таблицю clients запис:
2 Волков В.В. Волі 7 Донецьк 0112233
У той же час, до цього номер 2 був закріплений за Барановим. Номер клієнта повинен бути унікальним. Щоб уникнути такої плутанини, необхідно оголосити поле nk як первинний ключ: