MySQL: документация, знакомство с языком SQL

Oct 03, 2022 15:57

Пост касается работы в программе-клиенте «mysql.exe». Про установку сервера СУБД (системы управления базами данных) «MySQL» на компьютер и запуск-останов программы-сервера «mysqld.exe» у меня есть отдельные посты ( часть 1, часть 2, часть 3). Я использую операционную систему «Windows 10» и сервер СУБД «MySQL» версии 8.0 (бесплатной, со словом «Community» в названии).

Документация к СУБД «MySQL»

На официальном сайте mysql.com этой СУБД есть раздел «Documentation» (при переходе по этой ссылке попадаем в «Зону для разработчиков», что отмечается изменением названия домена на dev.mysql.com), посвященный документации самой СУБД и разных продуктов, связанных с этой СУБД. Этот раздел огромный и содержит большое количество документации.

Меня в первую очередь интересовало справочное руководство (reference manual, сокращенно «refman» в URL-адресе ниже) по СУБД «MySQL» версии 8.0 (оно на английском):

https://dev.mysql.com/doc/refman/8.0/en/

Это руководство мне понравилось, я прочел несколько первых глав. Изначально оно написано довольно давно, для предыдущих версий этой СУБД. Но в него постоянно вносят обновления о нововведениях в новых версиях. Поэтому важно использовать руководство, подходящее по версии к установленной на компьютере СУБД. В принципе, этим руководством можно начать пользоваться еще до установки СУБД на свой компьютер, так как в первых главах подробно описано, как следует загружать и устанавливать эту СУБД.

Знакомство с языком SQL

Третья глава упомянутого выше справочного руководства является небольшим пошаговым курсом (tutorial), который можно легко пройти за пару выходных:

https://dev.mysql.com/doc/refman/8.0/en/tutorial.html

Судя по примерам в этом пошаговом курсе, он был написан примерно в первой половине нулевых.

Для работы с этой главой требуется доступ к запущенному серверу «mysqld.exe» СУБД «MySQL». Работа происходит в программе-клиенте «mysql.exe» (это консольная программа, то есть нужно будет работать в командной строке), которая посылает запросы к запущенному серверу «mysqld.exe» СУБД «MySQL» и получает от него данные из баз данных, которые выводит в консоль (и не только). Программа-клиент «mysql.exe» (также как и программа-сервер «mysqld.exe») входит в набор исполняемых файлов продукта «MySQL Server 8.0». После установки СУБД все эти исполняемые файлы находятся в папке «bin» каталога, в который установлен этот продукт.

* * *

Не могу сказать, что я совсем не был знаком с языком SQL. Довольно сложно заниматься программированием и где-нибудь не познакомиться с этим языком, так как он появился довольно давно (в 1974 году) и до сих пор развивается и активно используется повсюду. Я примерно понимал, что он собой представляет, как им пользоваться и для чего он нужен.

SQL - это язык запросов («Structured Query Language») к СУБД, не только к СУБД «MySQL». Язык SQL настолько сросся с реляционными СУБД, что многие стали считать их одним и тем же, хотя язык SQL можно использовать не только для реляционных СУБД, а к реляционным СУБД можно приспособить для запросов не только язык SQL.

Тут, кстати, наверное, следует пояснить, что СУБД «MySQL» является реляционной СУБД, то есть СУБД, построенной на реляционной модели данных. Реляционные СУБД до сих пор (реляционная модель данных возникла в 1969-1970 годах) являются очень популярными, хотя у них существуют сильные конкуренты. Например, вид СУБД, которые ошибочно (по причине вышеупомянутого смешивания понятий «SQL» и «реляционные СУБД») называют «NoSQL» (не SQL), подразумевая «не реляционные СУБД». Одним из примеров такой СУБД является «MongoDB» (у меня есть про эту СУБД ряд постов).

* * *

Вернемся к пошаговому курсу из третьей главы руководства по СУБД «MySQL».

Надо понимать, что этот курс не обучает языку SQL, а, скорее, дает краткий обзор и поверхностное понимание того, как можно использовать этот язык для работы с реляционными базами данных на примере работы в программе-клиенте «mysql.exe». Так что для серьезного изучения языка SQL я бы порекомендовал использовать какой-нибудь серьезный учебник (пока что не могу посоветовать ничего конкретного, так как серьезно не занимался изучением языка SQL).

Например, в начале этого пошагового курса всё, в принципе, просто и понятно. Команды ясны и написаны близко к человеческому языку (близость к человеческому языку являлась, очевидно, одним из принципов, которыми руководствовались авторы языка SQL при его создании). Пример таких простых команд:

1. Создать базу данных с названием testdb:

mysql> CREATE DATABASE testdb;

2. Выбор базы данных testdb для работы (использования):

mysql> USE testdb

3. Создание в базе данных таблицы с названием pet и полями (столбцами) с названиями name, owner, species, sex, birth и death:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

4. Добавление в таблицу с названием pet строки с данными:

mysql> INSERT INTO pet
-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

5. Получение данных таблицы с названием pet (* в команде ниже означает получение всех столбцов) и вывод их в окно консоли:

mysql> SELECT * FROM pet;
Результат:

+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+

Зато ближе к концу курса просто вводишь предлагаемые запросы в командную строку, уже слабо понимая, как это всё работает. Например:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
FROM pet AS p1 INNER JOIN pet AS p2
ON p1.species = p2.species
AND p1.sex = 'f' AND p1.death IS NULL
AND p2.sex = 'm' AND p2.death IS NULL;

Для полного понимания, как работает этот запрос, нужно понимать, как работает операция соединения (join) реляционной алгебры. Поэтому в университетах перед изучением языка SQL (или параллельно такому изучению) изучают реляционную алгебру. Там, кстати, всё не слишком сложно, но много незнакомых слов, что может сначала слегка напугать.

* * *

Для работы в командной строке с программой-клиентом «mysql.exe» я использую программу-оболочку «PowerShell» (сейчас актуальная версия этой программы - 7), запущенную в программе-«эмуляторе терминала» «Windows Terminal» (конечно, можно пользоваться любыми альтернативами этих программ, но мне удобнее пользоваться этими):



Для выхода из программы-клиента «mysql.exe» можно использовать команду exit (а также quit или \q).

Кроме этого, в командной строке я люблю использовать команду cls (очистка буфера экрана). У программы-клиента «mysql.exe» нет собственного аналога этой команды, но в программе «mysql.exe» можно запускать «системные» команды с помощью команды system (или \!). То есть при работе в программе «mysql.exe» для очистки буфера экрана можно использовать команду system cls или \! cls. При этом, естественно, буфер команд не очищается (введенные ранее команды, как обычно, можно полистать из буфера команд с помощью клавиш-стрелок «Вверх» и «Вниз» клавиатуры).

Обычно я работаю с разными командами-запросами в рамках одной главы пошагового курса, а в начале чтения следующей главы очищаю буфер экрана, как будто мел со школьной доски. Но другие люди любят держать весь ввод в буфере экрана, у каждого свои привычки.

Буфером команд особенно удобно пользоваться для ввода запросов на языке SQL для создания новых строк с данными в таблице построчно INSERT INTO ... VALUES. В пошаговом курсе в качестве альтернативы рекомендуют команду-запрос LOAD DATA LOCAL INFILE, которая загружает данные в таблицу из текстового файла, в котором данные введены построчно, с разделением полей с помощью символа горизонтальной табуляции. Вроде как загрузка из файла быстрее. Загрузка из файла, конечно, быстрее, но данные в файл сначала нужно ввести, а это не факт, что быстрее, чем использование построчного ввода из командной строки, если использовать буфер команд.

Кроме того, загрузка данных из файла требует предварительной настройки разрешения такой загрузки со стороны как программы-сервера, так и программы-клиента. По умолчанию такая загрузка запрещена из соображений безопасности. Поэтому я пользовался построчной загрузкой данных из командной строки, мне так было легче (не люблю менять настройки программ, касающиеся безопасности).

Инструмент, Образование, Программирование, Английский язык

Previous post Next post
Up