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

Разбираем базы данных и язык SQL. (Часть 2) - "Java-проект от А до Я"

Статья из группы Java-проекты
Статья из серии о создании 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): You must reset your password using 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 аккаунт, где я выкладываю интересные проекты и наработки, что происходят в моей карьере. Всем, кому интересна работы в опенсорсе, предлагаю поучаствовать в моих проектах (репозиториях). Всем спасибо за внимание. Оставайтесь на связи, скоро будет следующая статья по базам данных.

Список всех материалов серии в начале этой статьи.

Комментарии (103)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Novichek_D290 Уровень 11
18 июня 2024
Пример создания Первичного ключа: ALTER TABLE books ADD PRIMARY KEY (book_id); Проверяем: mysql> DESC books; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | book_id | int | NO | PRI | NULL | | | book_name | varchar(255) | NO | | NULL | | | book_category | varchar(255) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) Команда создания вторичного ключа: ALTER TABLE books ADD FOREIGN KEY (author_id) REFERENCES authors(author_id); Больше инфы по ключам здесь: https://timeweb.cloud/tutorials/mysql/vneshnie-i-pervichnye-klyuchi-mysql
Кирилл Уровень 35
7 марта 2023
Спасибо огромнейшее!! Великолепный материал для практикума.
Sem Уровень 19
27 ноября 2022
+
Сергей Уровень 33
28 октября 2022
+
Алексей Кобзев Уровень 37
28 октября 2022
...восстановить ее не получится! (one line later) Восстановим таблицу
Oleksii Varykasha Уровень 2
4 июня 2022
+
Абдулла Уровень 19
21 мая 2022
как открыть консоль?
Loringen Уровень 34
8 февраля 2022
+
YesOn Уровень 13
24 января 2022
+ и нашёл опечатку:

DESC TABLE table_name; — посмотреть схему таблицы
Правильно команда звучит так:

DESC table_name; — посмотреть схему таблицы