JavaRush /Java блог /Random UA /Розбираємо бази даних та мову SQL. (Частина 2) - "Java-пр...
Roman Beekeeper
35 рівень

Розбираємо бази даних та мову SQL. (Частина 2) - "Java-проект від А до Я"

Стаття з групи Random UA
Стаття із серії про створення Java-проекту (посилання на інші матеріали – наприкінці). Її мета — аналіз ключових технологій, результат — написання телеграм-бота. "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 1Доброго здоров'я, дорогі читачі. Сьогодні мало говоритимемо і більше писатим, бо руки запам'ятовують набагато краще, ніж очі. У вас могло постати питання: чому ми використовуємо MySQL? Є, наприклад, той же PostgreSQL та інші рішення. Тут усе просто. По-перше, вона безкоштовна. По-друге, вона має зручний UI-інтерфейс (про нього ми поговоримо в окремій статті). По-третє, вона мені знайома та приємна. До всього перерахованого MySQL ще й дуже поширена.

Перевірка домашнього завдання

Минулого разу я давав завдання встановити собі на машину MySQL і зайти в нього. Через консоль, або якимось іншим способом. Усі зробабо? "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 2Хто зробив – молодець! Не важливо, на якому ви рівні JavaRush - важливо вміти встановити і налаштувати по мануалах необхідні інструменти для роботи. А я вас запевняю, що їх буде багато. Хтось намагався, але не вийшло — теж не страшно. Не завжди це буває з першого разу: іноді потрібно зробити перерву та спробувати зі свіжими силами ще раз. Хто встановив MySQL сам — напишіть «+» у коментарях, щоб я знав, що це робить. Сам це робитиму теж. Так як у мене більше немає ноуту на Windows, показуватиму на макбуку. Не думаю, що сильно відрізнятиметься процес установки. Для тих, хто хоче встановити сам, використовуючи англійський мануал, прошу сюди .

Встановлюємо MySQL на MacOS

Насамперед переходимо за наступним посиланням , вибираємо операційну систему, чи то Windows, Ubuntu або MacOS, як показано нижче: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 3Завантажуємо та запускаємо. У мене, правда, не одразу все пішло правильно. Виявилося, що Apple не пропускає встановлення останньої версії: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 4Можна, звичайно, відключити цю справу, але макбук робітник, і лізти в його налаштування не буду. Тому методом спроб і помилок знайшов версію, яку можна встановити - це 5.7.21 . Щоб знайти інші версії, перейшов до Archive вкладку і вибрав потрібну версію: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 5Далі запускаємо завантажений файл. Натискаємо далі, далі, далі, а ось наприкінці будьте уважні! Там буде ім'я та пароль для входу до бази даних. У мене це виглядало так: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 6Тут сказано, що буде користувач з ім'ямroot та паролем Vac/zto=.24q . На цьому встановлення завершено.

Входимо до командного рядка MySQL

Щоб увійти, потрібно переконатися, що сервер MySQL включений. Для цього заходимо в System Preferences , знаходимо там значок MySQL: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 7Переходимо в неї і бачимо, що сервер потрібно включити. Для цього просто натискаємо Start MySQL Server та все. Так, можна поставити галочку, щоб сервер піднімався у фоновому режимі при кожному старті машини. "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 8Важливо, що всі запити в терміналі я починатиму з символу $ , щоб було зрозуміло. Далі потрібно безпосередньо підключитися до сервера MySQL через командний рядок. Для цього відкриваємо terminal і пишемо: $ mysql І тут два варіанти:
  1. Якщо відповідь буде «ERROR 1045 (28000): Access denied for user 'roman_beskrovnyi'@'localhost' (using password: NO» , то це означає, що сервер встановлений і відгукується. Просто потрібно передати йому правильну команду.
  2. Якщо буде відповідь command not found: mysql , не страшно просто немає посилання на сервер. Для цього потрібно буде зробити аліас зі змінною mysql, тому пишемо наступний рядок:

    $ alias mysql=/usr/local/mysql/bin/mysql

    Це допоможе лише для цієї сесії терміналу. Але нам більше й не потрібно працювати весь час через термінал ми точно не будемо.

  3. MySQL не встановлений, не морочте комп'ютер голову.
Далі, використовуємо ім'я та пароль, надані, під час установки, і пишемо: $ mysql --user=root -p"Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 9 Там пишемо пароль, і буде нам щастя ось у такому вигляді: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 10Якраз останній рядок каже, що ми зайшли в термінал MySQL сервера. Але цей пароль для root виявився разовим і його потрібно змінити на інший. З міркувань безпеки, зрозуміло. Якщо не поміняти і спробувати створити нову базу даних у сервері, отримаємо таку відповідь: ERROR 1820 (HY000): Ви повинні змінити вашу думку за допомогою ALTER USER statement before executing this statement . "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 11Примушують, так би мовити. Ну та гаразд, що нам, складно чи що? Пароль зробимо простішим (це лише для локальної роботи, для реальної роботи пароль має бути складним, зрозуміло). Скажімо, root∫, як і ім'я користувача. Щоб змінити пароль, потрібно ввести рядок: ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; І буде така відповідь: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 12Щоб переконатися, що все працює правильно, спробуємо створити нову базу даних, використовуючи наступний синтаксис : $ CREATE DATABASE test_db; Щоб переконатися, що така база даних створена на сервері, напишемо команду $ SHOW DATABASES; І як результат отримаємо наступне: "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 13Ось і все :) Сказати, що це було просто та швидко, не можна. Тому хтось зробив це сам — окремий респект. Хто не зробив - не парьтесь, мануали лежать на всі види установки: Там все описано цілком осудно. Єдине, що там все англійською. Тепер пишемо свої перші рядки у SQL.

Пишемо свої перші рядки в SQL

Як ви вже могли помітити вище, нам відомі дві команди:
  1. CREATE DATABASE – створює базу даних на сервері;
  2. SHOW DATABASES – показує всі створені та доступні бази даних на сервері.
Зазначу, що SQL не важливо, як ми писатимемо їх команди — чи всі великими літерами, чи ні. Тим не менш, писати команди з великими літерами вважається ознакою гарного тону. Далі, щоб видалити базу даних, потрібно написати команду DROP DATABASE database_name ; де database_name – ім'я бази даних, яку ми хочемо видалити. Ми вже створювали тестову базу даних з ім'ям test_db , тому давайте її і видалимо. Для цього напишемо: $ DROP DATABASE test; Варто зазначити, що відповідь Query OK, 0 rows affected (0.02 sec) дуже важлива, оскільки він підтверджує, що запит пройшов успішно. До того ж він каже, скільки рядків у таблицях цей запит змінив і за який час. "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 15Загалом слово DROPвідповідає за видалення чогось. У цьому випадку ми видалабо базу даних. Але це також можна використовувати для інших цілей (наприклад, видалення таблиці). І тепер, щоб повірити мені перевірити результат, подивимося, скільки залишилося баз даних: $ SHOW DATABASES; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 16Як бачимо, бази даних з ім'ям test_db немає. ЧТД :D

Створюємо свою базу даних та таблицю

Створюємо базу даних cities: $ CREATE DATABASE cities; Щоб працювати у певній базі даних, потрібно увійти до неї. Для цього використовується команда USE database_name , після цього всі команди для роботи з таблицями будуть проводитися саме в цій базі даних. $ USE cities; Як видно з відповіді - Database changed , перехід у цю базу даних пройшов успішно. "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 17Наступний етап – створення таблиці. Який? Ну, спочатку створимо таблицю з країнами. Чому так? Тому що для міст потрібен зовнішній ключ країни, в якій він знаходиться. А його можна отримати після того, як ці країни взагалі почнуть перебувати в БД (тут і далі скорочено від бази даних). Як ми пам'ятаємо із попередньої статті, у таблиці, де описані країни, ми маємо два поля — ID і name, де ID — це унікальний ідентифікатор, а name — це ім'я країни. Тому створити таку базу даних простіше простого. Пишемо: $ CREATE TABLE country (id INT, name VARCHAR(30)); "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 18Як бачимо, все пройшло успішно. За аналогією з SHOW DATABASES, можемо переглянути список таблиць: $ SHOW TABLES; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 19Ось вона наша таблиця. Тепер навчимося видаляти таблиці. Для цього напишемо: $ DROP TABLE country; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 20Важливо відзначити, щоб після видалення таблиці або бази даних відновити її не вдасться!

Працюємо з таблицею

Відновимо таблицю, яку ми створабо. Для цього потрібно просто повторити те, що робабо. Щоб подивитися на структуру таблиці, потрібно використовувати наступну команду - DESC table_name $ DESC country; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 21Як ви бачите, всю інформацію про таблицю записано тут. Щоб додати щось до таблиці, необхідно використовувати команду INSERT INTO table_name VALUES() . Додамо три записи для трьох країн: $ INSERT INTO country VALUES (1, 'Ukraine'); $ INSERT INTO country VALUES (2, 'Russia'); $ INSERT INTO country VALUES (3, 'Belorus');"Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 22Щоб подивитися на те, що збережено в БД, будемо використовувати найпростіший запит на отримання даних. Для цього ми хочемо отримати дані всіх полів із таблиці country. Уважно запам'ятайте попередню пропозицію, тому що запит SQL буде такий: $ SELECT * FROM country; Де означає, що потрібно взяти всі поля. "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 23Ось яка краса вийшла у нас. Якщо нам захочеться отримати лише конкретне поле — не проблема: замість зірки пишемо через кому імена полів, які мають бути. Спробуйте самі ;) Створабо ми вже таблицю, але мало інформації у нас по ній. Чисельність населення явно не завадила б, так? А як це зробити?
  1. Додати до схем таблиці нове поле — населення (population).
  2. Оновити наявні записи.
Для першого використовуватимемо команду ALTER TABLE table_name ADD COLUMN . Взагалі ALTER TABLE — це безліч команд для операцій DDL (пам'ятаєте що це? Було в попередній статті). До речі, SELECT відноситься до DML операції. Напишемо наступне: $ ALTER TABLE country ADD COLUMN population INT; $ DESC country;"Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 24Як видно з малюнка, ми успішно додали нове поле для таблиці та другою командою перевірабо, що поле знаходиться у схемі. Другий крок – оновити записи в таблиці та присвоїти значення. Чисельність візьмемо з Вікіпедії. Не те щоб я їм довіряю, але це найшвидший і найпростіший спосіб. Для цього скористається ще однією командою DML. Але для початку проговоримо, що ми хочемо зробити: ми хочемо оновити таблицю country, зробити population поле рівним 41806221 у записі, де id = 1. А ось як виглядає ця конструкція: UPDATE table_name SET table_row1 = value WHERE table_row2 = value2; Грунтуючись на ній, запишемо: $ UPDATE country SET population = 41806221 WHERE id = 1; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 25Тут ми вперше використали ключове слово WHERE. Це потрібно, щоб додати значення для фільтрації. Наприклад, цього разу ми сказали, що оновлювати потрібно тільки для поля (полів), у яких id дорівнює одиниці (поки ми SQL не сказали, що це первинний ключ — їх може бути кілька). Ми також могли вказати умову типу WHERE id > 2. Якби ми зовсім не вказали фільтрацію, це значення записалося б у всі записи таблиці. Для Росії, Білорусі та інших країн оновіть самі ;) А тепер спробуємо отримати дані з таблиці для поля name та population, за умови, що id буде більше 1. $ SELECT name, population FROM country WHERE id >1; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 26Таким чином, ми отримали тільки ті поля, які самі захотіли. Через INSERT INTO можна вказати, які поля ми хочемо додати, а які залишити порожніми. Для цього напишемо: $INSERT INTO country (name, population) VALUES('Georgia', 1234566); Щоб перевірити, що вийшло, переглянемо список усіх полів: $ SELECT * FROM country; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 27Без id запис поганий, та й населення, ясна річ, із голови взято, тому потрібно видалити її. Скористайтеся командою DELETE FROM table_name : $ DELETE FROM country WHERE name = 'Georgia'; "Java-проект від А до Я": розбираємо бази даних та мову SQL.  Частина 2 - 28Таким чином, ми вивчабо і видалення поля з таблиці.

Домашнє завдання

Домашнє завдання буде наступним:
  1. Потрібно додати у схему таблиці country первинний ключ (PRIMARY KEY) із поля ID.
  2. Додати до таблиці country ще одну країну – Молдову.
  3. За схемою попередньої статті створити таблицю city, де будуть всі описані поля. Імена полів будуть наступними: id, name, country_id, population.
  4. Додати первинний ключ у таблиці city.
  5. Додати зовнішній ключ до таблиці city.
Завдання цікаве для тих, хто в темі, воно буде швидке і нескладне. Для тих, хто немає, послужить чудовим закріпленням матеріалу з цієї статті.

Підведемо підсумки

У рамках цієї статті ми зробабо багато чого. По-перше, встановабо та запустабо сервер БД MySQL. По-друге, вивчабо цілий перелік ключових слів та запитів, за допомогою яких вміємо тепер створювати/видаляти бази даних, таблиці. Навчабося додавати дані до таблиць, оновлювати та видаляти їх. Ось усі команди, які ми використовували, разом із їх описом:
  • CREATE DATABASE database_name; - Створити нову БД
  • SHOW DATABASES; - Подивитися список БД
  • DROP DATABASE database_name; - Видалити БД
  • USE database_name; - Працювати в БД
  • CREATE TABLE table_name (id INT, ...); - Створити таблицю
  • SHOW TABLES; - Подивитися список таблиць
  • DESC TABLE table_name; - Подивитися схему таблиці
  • DROP TABLE table_name; - Видалити таблицю
  • INSERT INTO table_name VALUES(); — додати поле до таблиці
  • SELECT * FROM table_name WHERE table_row = value; — отримати поля у таблиці за умови після WHERE
  • SELECT * FROM table_name; - Отримати всі поля в таблиці
  • ALTER TABLE table_name ADD COLUMN column_name COLUMN_TYPE; - додати поле нове поле до схеми таблиці
  • UPDATE talbe_name SET talbe_row1 = value1 WHERE table_row2 = value2; — оновити записи в таблиці: встановити значення одного поля за умови іншого поля
  • DELETE FROM table_name WHERE table_row1 = value1; - Видалити поле (або поля) з таблиці за певної умови.
Як на мене, ми провели з вами чудову роботу. Усім, кому подобається моя діяльність, пропоную підписатися на мій аккаунт GitHub , де я викладаю цікаві проекти та напрацювання, що відбуваються в моїй кар'єрі. Усім, кому цікава робота в опенсорсі, пропоную взяти участь у моїх проектах (репозиторіях). Всім дякую за увагу. Залишайтеся на зв'язку, незабаром буде наступна стаття з баз даних.

Список всіх матеріалів серії на початку цієї статті.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ