Уроки по темі бази даних

ЧАСТИНА 1 Підготовка до уроків
§ 1 Що таке MySOL?

§ 3 Як отримати та інсталювати програмне забезпечення
Різні програми-ліенти
Консольний клієнт mysqIexe
GUI-клієнт mysqlgui

§ 4 Реляційні бази даних: основні поняття
База даних "Сторінка класного журналу"
Що таке ключ?
Що таке зв'язок?
Реляційні оператори вибору, проектування та об'єднання
оператор вибору
оператор проектування
оператор об'єднання
Що таке запит?
Що є результатом запросаf

§ 5 Основи мови SQL
команда USE
Синтаксис команди USE
Приклад використання команди USE
команда SHOW
Синтаксис і приклади використання команди SHOW
Команда CREATE DATABASE
Синтаксис команди CREATE DATABASE
Приклад використання команди CREATE DATABASE
Команда CREATE TABLE
Синтаксис команди CREATE TABLE
команда INSERT
Синтаксис команди INSERT
Приклад використання команди INSERT
команда SELECT
Синтаксис команди SELECT
частина <запрашиваемая информация>
частина FROM
частина WHERE
Частина GROUP BY
частина HAVING
Частина ORDER BY
команда UPDATE
Синтаксис команди UPDATE
Приклад використання команди UPDATE
команда DELETE
Синтаксис команди DELETE
Приклад використання команди DELETE
команда DROP
Синтаксис команди DROP
Приклад використання команди DROP

§ 6 Установка MySOL в локальній мережі класу Підготовка та адміністрування навчальної бази даних Установка і настройка MySOL в локальній мережі
Конфігурація комп'ютера-клієнта
Конфігурація комп'ютера-сервера
Установка навчальної бази даних
Таблиця student
Таблиця event
Таблиця score
Таблиця absence
Зв'язки між таблицями
Налаштування параметрів системи безпеки
"Кухня" системи безпеки MySOL

ЧАСТИНА 1. підготовці до уроків

MySQL являє собою вільно поширювану реляционную систему управління базами даних (СКБД), побудовану на технології клієнт-сервер. СУ БД MySQL включає в себе SQL-сервер (його часто називають "сервером баз даних"), програми-клієнти і супутнє програмне забезпечення (кошти адміністрування, інтерфейси для взаємодії з додатками, написаними на різних мовах програмування, і документацію).
Є версії MySQL для різних операційних систем. Необхідно підкреслити (для тих, хто не має достатнього досвіду роботи з системами типу клієнт-сервер, це іноді буває неочевидно), що сервер баз даних і програми-клієнти можуть працювати під управлінням різних операційних систем.
Слід зазначити, що ми постійно використовуємо системи, побудовані на технології клієнт-сервер, але, як правило, позбавлені необхідності вникати в подробиці взаємодії клієнта і сервера. Наприклад, коли ми переглядаємо web-сторінки, розміщені на web-сервері, клієнтом є наш браузер (а сервером, зрозуміло, web-сервер). Браузер (клієнт) відправляє запити, у відповідь на які сервер виробляє певні дії, наприклад, пересилає браузеру запитану web-сторінку.
Взаємодія з SQL-сервером також проводиться за допомогою запитів, у відповідь на які сервер повертає запитувану інформацію або виконує необхідну модифікацію даних. Запити до SQL-сервера формулюються на мові SQL (Structured Query Language>.
Зазвичай взаємодія програм-клієнтів з сервером MySQL проводиться по протоколу TCP / IP.


§ 3. Як отримати та інсталювати програмне забезпечення

Як ми вже відзначали, є версії MySQL практично для всіх поширених операційних систем. На наш погляд, найкращим варіантом є установка SQL-сервера під Linux або FreeBSD. Однак ми розуміємо, що значне число наших Новомосковсктелей віддадуть перевагу версію MySQL для Windows, тому опишемо саме цей варіант. Відзначимо при цьому, що і Windows-версія MySQL надзвичайно стабільна, а вже для навчальних цілей її продуктивності вистачає з лишком. Має сенс для початку встановити і сервер, і клієнт на одному комп'ютері, випробувати їх в роботі, а потім вже налагоджувати мережеву версію.

Після завершення установки каталог С: \ mysql матиме вигляд:
С. \ mysql
bench
bin
data
Docs
examples
include
lib
scripts
share
infolist.txt
my-example.cnf
mysqlbug.txt
Readme
Uninst.isu
В каталозі bin знаходяться всі виконувані файли, в тому числі сам SQL-сервер і програми-клієнти. Документація (англійською мовою) міститься в каталозі Docs. Каталог data призначений для зберігання баз даних. Кожна база даних зберігається в окремому каталозі, ім'я якого збігається з її назвою. Після установки в каталозі data є два підкаталогу (відповідно є дві бази даних) - mysql і test.
Файл mу-example.cnf є шаблоном файлу конфігурації. Його потрібно перейменувати в my.cnf і помістити в кореневий каталог диска С. Але це можна зробити пізніше (тим більше що в цей файл потрібно внести деякі зміни). Зараз набагато цікавіше випробувати SQL-сервер в роботі. SQL-сервер запускається фaйлoм mysqld.ехе (назва файлу утворено від "MySQL Daemon"), який розташований в каталозі bin. У разі вдалого запуску на екрані, ви не побачите нічого. Сервер запускається мовчки. Далі слід запустити файл mysql.ехе - програму-клієнт, що працює в текстовому режимі. Якщо все було зроблено правильно, то клієнт запуститься, встановить з'єднання з сервером і виведе запрошення, у відповідь на яке модою вводити команди. Більш докладного знайомства з командами мови SQL присвячений § 5, поки ж ви можете спробувати MySOL в роботі на прикладі команд SHOW DATABASES і SELECT (див. Приклади 1 і 2). Результатом команди SHOW DATABASES є перелік баз даних, доступних на SQL-сервері (див. Приклад 1). А команда SELECT NOW (). USER () повідомляє поточну дату і час (результат NOW ()) і ім'я користувача, під яким програма-клієнт встановила з'єднання з сервером (результат USER ()). Зверніть увагу на те, що команди завершуються символом ";". Це є особливістю даної програми-клієнта, а не вимогою мови SQL. Слід також звернути увагу на те, що в прикладі 2 спеціально показаний спосіб введення многострочной команди. Якщо рядок не завершується символом ";", про грами mysql виводить в наступному рядку запрошення "->", яке свідчить про те, що очікується продовження команди.
приклад 1
С. \ mysql \ bin> mysql. ехе
Welcome to the MySQL monitor. Commands end with; or \ g.
Your MySQL connection id is 2 to server version. 3.23.3 6 -debug
Type 'help; 'Or' \ h 'for help. Type '\ c' to clear the buffer
mysql>

mysql> SELECT NOW (),
-> USER ();

Роботу сервера mysqld слід завжди завершувати правильно. Для цього необхідно використовувати наступну команду:
З: \ mysql \ bin> mysqladmin.exe -u root shutdown
Програма mysqladmin.exe знаходиться в каталозі C: ​​\ mysql \ bin. Згодом, коли ви, керуючись інструкціями з § 6, визначте пароль для користувача root, при виклику програми mysqladmin треба буде давати цей пароль:
З: \ mysqi \ bin> mysqiaamin.схс -u root -рпароль shutdown

Консолиний клієнт mysql.exe


У всіх прикладах, наведених у цьому номері, і при проведенні уроків ми використовуємо консольную програму-клієнт mysql.exe. Працювати з цією програмою, м'яко кажучи, не дуже зручно. Її основний недолік -
відсутність можливості редагування рядків запиту в процесі введення (після переходу на новий рядок). Відзначимо, що цього недоліку позбавлені версії клієнта mysql для Linux і FreeBSD. Для полегшення роботи з mysal слід використовувати можливості виконання запиту, записаного в текстовому файлі, і ведення протоколу (сооттствующіе приклади наведені нижче). І все ж нам здається доцільним на перших порах (і на уроках) використовувати саме цей, не дуже зручний клієнт. При всіх його недоліках він має і одна істотна методичне гідність: змушує вводити запити вдумливо, "промовляючи" кожен оператор, кожен крок.

§ 4. Реляційні бази даних: основні поняття


Краще? Краще. Але. Можливо, ви вже й самі звернули увагу на те, що ми не все передбачили в нашій таблиці. Більш точно: ми не врахували важливу особливість вихідних даних: справа в тому, що в один день може бути проведено більше одного уроку. Звичайно, записати їх в таблицю "Уроки" не проблема, але от як ми зрозуміємо з таблиці "Оцінки", за який саме урок виставлена ​​оцінка? Ця проблема вирішується тим же способом, яким ми забезпечили унікальність учнів: уроки повинні отримати унікальні (для простоти - числові) ідентифікатори. Простіше кажучи, як і учнів, уроки (все, від початку до кінця навчального року, наскрізь) треба пронумерувати. І вказувати в таблиці "Оцінки» не дати, а номери уроків. У таблиці "Пропуски" ми теж будемо вказувати номери уроків (адже учень може прийти на контрольну, а звичайний урок пропустити). Знову змінимо структуру таблиць (зміни торкнуться лише таблиць "Оцінки", "Уроки" і "Пропуски").


Ймовірно, ви звернули увагу на те, що ми виділили напівжирним шрифтом назви деяких полів (поля "Номер учня" в таблиці "Учні", поля "Номер учня" і "Номер уроку" в таблиці "Оцінки" і т.д.). Виділені поля є ключами (ключовими полями) відповідних таблиць. Поняття ключа є одним з ключових понять баз даних, тому зупинимося на ньому докладніше. З наведеного прикладу, зокрема, видно, що ключем таблиці може бути одне поле або набір полів (в останньому випадку вживають термін "складовою ключ"). Ключ однозначно визначає кожен рядок таблиці, тобто ніякі два рядки таблиці не містять однакові значення ключа (в разі складного ключа значення 6 складових його полях можуть повторюватися, але набір цих значень повинен бути унікальним).
Чи завжди в таблицях виділяють ключові поля. В принципі наявність ключа не є обов'язковим. Реляційні СУБД дозволяють створювати таблиці і без ключових полів. Але, як правило, відсутність в таблиці ключа буває викликано помилками проектування бази даних. Тому, якщо ви бачите, що в таблиці не можна виділити ключові поля, слід уважно перевірити проект, швидше за все щось у ньому не так. А як виділяти ключ? Чи завжди ключові поля виділяються однозначно? Взагалі кажучи, немає. Але слід розуміти, що ключі в таблицях виділяються не просто "щоб були". Основне призначення ключів - зв'язування таблиць.
У нашому прикладі таблицю "Учні" можна пов'язати з таблицями "Оцінки" і "Пропуски" за значенням поля "Номер учня". Таблиця "Уроки" може бути пов'язана з таблицями "Оцінки" і "Пропуски" за значенням поля "Номер уроку". Але що значить "пов'язана"?
Що таке зв'язок?
Взагалі кажучи, з точки зору MySQL зв'язків між таблицями не існує. Подібної точки зору дотримуються розробники і деяких інших реляційних СУБД. Хоча в мові SQL є засоби для опису зв'язків (їх використання в MySQL не приводить до помилки, вони просто ігноруються) і, безумовно, зв'язку широко використовуються при роботі з реляційними базами даних. Так в чому ж протиріччя? Протиріччя немає. Таблиці зв'язуються так, як ми (розробники БД) собі це уявляємо. Наприклад, першому рядку таблиці "Учні" ( "Номер учня" = 1) відповідають перший і третій рядки таблиці "Оцінки" (з тим самим значенням поля "Номер учня"). Таким чином, ми вважаємо (так ми спроектували БД), що таблиці "Учні" і "Оцінки" пов'язані з значенням полів "Номер учня" і "Номер учня" (тут ми хочемо підкреслити, що поля, за якими проводиться зв'язування, не зобов'язані мати однакові назви, хоча найчастіше так і роблять, щоб не заплутатися). Для опису зв'язків між таблицями в мові SQL є спеціальні ключові слова REFERENCES і FOREING KEY, які вживаються при описі полів таблиць. MySQL їх ігнорує.
Отже, ми фактично зафіксували два положення: зв'язок - це відповідність між рядками двох таблиць; зв'язок між таблицями встановлюється за значеннями деяких полів (тобто таблиці не можуть бути пов'язані "взагалі", вони обов'язково зв'язуються по деяким значенням). Вибір полів, за якими проводиться зв'язування, визначає тип зв'язку: "один до багатьох", "багато до багатьох", "один до одного". Іноді на етапі проектування бази даних стає ясно, що з змістовної точки зору таблиці пов'язані, але відповідних полів для організації зв'язку з цим не знаходиться. Це свідчить про те, що слід завести ще одну "сполучну" таблицю (трохи нижче ми розглянемо відповідний приклад). Ми не станемо детально розглядати різні типи зв'язків, лише коротко опишемо їх (вичерпний розповідь про типи можна знайти, наприклад, в [2]).
При зв'язуванні таблиць А і В "один до одного" кожному рядку таблиці А відповідає одна і тільки одна рядок таблиці В і навпаки. Зв'язки "один до одного" можна організовувати, але вони, взагалі кажучи, не мають великого сенсу, оскільки їх наявність свідчить про те, що ми розділили по окремим таблиць те, що можна було не розділяти (і навіть, можливо, не варто було розділяти) . Втім, іноді зв'язку "один до одного" використовуються для оптимізації роботи з базою даних.
При зв'язуванні таблиць А і В "один до багатьох" кожному рядку таблиці В відповідає рівно один рядок таблиці А. Зв'язки типу "один до багатьох" - основний інструмент розробників баз даних. Зокрема, в розглянутому нами прикладі таблиця "Учні" пов'язана з таблицями "Оцінки" і "Пропуски" саме як "один до багатьох". Так само пов'язані таблиці "Уроки" і "Оцінки" і "Уроки" і "Пропуски". При зв'язуванні таблиць "один до багатьох" на стороні "одного" завжди використовується ключове поле таблиці. Пов'язане з ним поле на стороні "багатьох" називають зовнішнім ключем.
При зв'язуванні таблиць А і В "багато до багатьох" кожному рядку таблиці А можуть відповідати кілька рядків таблиці В і навпаки. Якщо при проектуванні бази даних між двома таблицями з'являється зв'язок "багато до багатьох", її слід ліквідувати шляхом введення додаткової таблиці. Наведемо приклад. Нехай нам потрібно описати систему "вчителя - предмети" (які вчителі які предмети ведуть). Ясно, що один предмет можуть вести кілька вчителів, а один вчитель, таке зустрічається часто-густо, може вести кілька предметів. Список вчителів буде зберігатися в таблиці "Вчителі", список предметів - в таблиці "Предмети":

Схожі статті