Основы управления базами данных с использованием MySQL

MySQLBeginner
Практиковаться сейчас

Введение

В этом практическом занятии (лабораторной работе) мы рассмотрим основные концепции управления базами данных с использованием MySQL. Мы изучим создание и удаление баз данных, выбор базы данных и получение метаданных. Эти навыки важны для всех, кто работает с базами данных, от новичков до опытных разработчиков. По завершении этого практического занятия у вас будет прочный фундамент в базовых операциях с базами данных MySQL.

Цели обучения

После завершения этого практического занятия вы сможете:

  • Создавать и удалять базы данных различными методами
  • Выбирать и переключаться между базами данных
  • Получать важные метаданные о вашем сервере MySQL и базах данных
  • Понять, как чувствительны имена баз данных в MySQL к регистру символов

Создание и перечисление баз данных

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

Сначала откройте окно терминала. В среде LabEx вы будете использовать систему Ubuntu Linux. Терминал, возможно, уже открыт, но если нет, вы можете открыть его, нажав на значок терминала.

Теперь запустим клиент MySQL:

sudo mysql -u root

В виртуальной машине LabEx вам не нужно вводить пароль для пользователя root.

Скриншот терминала клиента MySQL

После подключения к клиенту MySQL вы увидите приглашение, похожее на это: MariaDB [(none)]>. Это означает, что вы подключены к серверу MariaDB (который является форком MySQL), но еще не выбрали конкретную базу данных.

Перечисление доступных баз данных

Начнем с перечисления доступных баз данных на вашем сервере MySQL:

SHOW DATABASES;

Вы должны увидеть вывод, похожий на следующий:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.000 sec)

Эта команда перечисляет все базы данных, доступные на сервере в данный момент. Разберем, что представляют собой эти базы данных по умолчанию:

  • information_schema: База данных, которая предоставляет доступ к метаданным базы данных.
  • mysql: Системная база данных, содержащая информацию о пользовательских учетных записях и привилегиях.
  • performance_schema: База данных для мониторинга выполнения сервера MySQL на низком уровне.
  • sys: База данных, которая предоставляет набор объектов для интерпретации данных, собранных схемой Performance Schema.

Создание базы данных

Теперь создадим новую базу данных с именем 'Hello_World'. В MySQL для этого используется команда CREATE DATABASE:

CREATE DATABASE Hello_World;

После выполнения этой команды MySQL ответит следующим образом:

Query OK, 1 row affected (0.000 sec)

Это означает, что база данных была успешно создана. Чтобы убедиться в этом, перечислим базы данных еще раз:

SHOW DATABASES;

Теперь вы должны увидеть 'Hello_World' в списке:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.000 sec)

Отлично! Вы только что создали свою первую базу данных.

Чувствительность имен баз данных к регистру

Важное понятие, которое нужно понять в MySQL, заключается в том, что имена баз данных чувствительны к регистру. Это означает, что 'Hello_World' и 'hello_world' рассматриваются как две разные базы данных. Продемонстрируем это:

CREATE DATABASE hello_world;
SHOW DATABASES;

Теперь вы должны увидеть как 'Hello_World', так и 'hello_world' в списке:

MariaDB [(none)]> CREATE DATABASE hello_world;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| hello_world        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.000 sec)

Это показывает, что 'Hello_World' и 'hello_world' рассматриваются как две отдельные базы данных. При проектировании баз данных обычно хорошей практикой является использование последовательных соглашений об именовании, чтобы избежать путаницы. Многие разработчики предпочитают использовать все строчные буквы для имен баз данных, чтобы избежать потенциальных проблем с чувствительностью к регистру.

Создание баз данных с использованием mysqladmin

На этом этапе мы рассмотрим альтернативный метод создания баз данных с использованием инструмента mysqladmin. Этот инструмент представляет собой утилиту командной строки, которая позволяет выполнять некоторые административные операции без входа в командную строку MySQL.

Сначала выйдем из клиента MySQL. Для этого введите exit или quit и нажмите Enter:

exit

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

mysqladmin -u root -p create hello_world2

При запросе пароля просто нажмите Enter (помните, в виртуальной машине LabEx у пользователя root MySQL не установлен пароль).

Разберем команду mysqladmin, которую мы только что использовали:

  • -u root: Это указывает, что мы подключаемся как пользователь root.
  • -p: Это сообщает mysqladmin запрашивать пароль.
  • create: Это операция, которую мы выполняем.
  • hello_world2: Это имя базы данных, которую мы создаем.

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

sudo mysql -u root

После входа в клиент MySQL перечислим базы данных:

SHOW DATABASES;

Вы должны увидеть 'hello_world2' в списке:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| hello_world        |
| hello_world2       |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.000 sec)

Инструмент mysqladmin предоставляет быстрый способ создания баз данных непосредственно из командной строки, что может быть полезно для скриптинга и автоматизации задач. Он особенно удобен, когда вам нужно создавать базы данных в рамках более крупного скрипта или автоматизированного процесса.

Удаление баз данных

Теперь, когда мы создали несколько баз данных, давайте научимся их удалять. В управлении базами данных знание того, как удалять базы данных, не менее важно, чем знание того, как их создавать. Мы оставим только базу данных 'Hello_World' и удалим остальные.

Удаление базы данных с использованием клиента MySQL

Войдите в клиент MySQL, если вы еще не в нем:

sudo mysql -u root

Теперь удалим базу данных 'hello_world':

DROP DATABASE hello_world;
SHOW DATABASES;

Вы должны увидеть, что 'hello_world' больше не в списке:

MariaDB [(none)]> DROP DATABASE hello_world;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| hello_world2       |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.000 sec)

Примечание: Будьте чрезвычайно осторожны при использовании команды DROP DATABASE. Она безвозвратно удаляет базу данных и все ее содержимое без запроса подтверждения. В производственной среде обычно перед выполнением таких операций предусматриваются меры безопасности и резервные копии.

Удаление базы данных с использованием mysqladmin

Теперь используем mysqladmin для удаления базы данных 'hello_world2'. Этот метод считается более безопасным, так как он запрашивает подтверждение перед удалением базы данных.

Выйдите из клиента MySQL, набрав exit или quit, затем выполните следующую команду в терминале:

mysqladmin -u root -p drop hello_world2

Вам будет предложено подтвердить действие:

Enter password:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'hello_world2' database [y/N] y
Database "hello_world2" dropped

Введите 'y' и нажмите Enter, чтобы подтвердить. Этот дополнительный шаг подтверждения может помочь избежать случайного удаления базы данных.

Теперь войдите обратно в клиент MySQL и убедитесь, что 'hello_world2' была удалена:

SHOW DATABASES;

Вы должны увидеть:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.000 sec)

Мы успешно удалили лишние базы данных, оставив только те, которые нам нужны.

Выбор и использование баз данных

Теперь, когда мы научились создавать и удалять базы данных, давайте узнаем, как выбирать и использовать конкретную базу данных. Это важный навык, так как большая часть вашей работы в MySQL будет связана с операциями внутри определенной базы данных.

Выбор базы данных

Для выбора базы данных, с которой вы будете работать, используйте команду USE, за которой следует имя базы данных:

USE Hello_World;

Вы должны увидеть:

Database changed

Это означает, что вы теперь работаете в рамках базы данных 'Hello_World'. Любые последующие команды, которые вы запустите, будут выполняться в контексте этой базы данных, если вы не укажете иное.

Перечисление таблиц в базе данных

Чтобы увидеть таблицы в текущей базе данных, используйте команду SHOW TABLES;:

SHOW TABLES;

Поскольку мы еще не создали ни одной таблицы в нашей базе данных 'Hello_World', вы увидите:

Empty set (0.00 sec)

Это нормально для новой базы данных. По мере создания таблиц они будут появляться в этом списке.

Давайте переключимся на другую базу данных и перечислим ее таблицы, чтобы увидеть, как это работает с заполненной базой данных:

USE mysql;
SHOW TABLES;

Вы увидите список таблиц в системной базе данных 'mysql':

MariaDB [mysql]> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| column_stats              |
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| global_priv               |
| gtid_slave_pos            |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| index_stats               |
| innodb_index_stats        |
| innodb_table_stats        |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| roles_mapping             |
| servers                   |
| slow_log                  |
| table_stats               |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| transaction_registry      |
| user                      |
+---------------------------+
31 rows in set (0.001 sec)

Это демонстрирует, как переключаться между базами данных и просматривать их содержимое. База данных 'mysql' содержит системные таблицы, которые MySQL использует для управления разрешениями, пользовательскими учетными записями и другой внутренней информацией. В своих собственных приложениях вы будете создавать и управлять своими собственными таблицами в своих пользовательских базах данных.

Получение метаданных MySQL

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

Версия сервера

Чтобы узнать версию сервера MySQL, используйте:

SELECT VERSION();

Вы увидите вывод, похожий на следующий:

MariaDB [mysql]> SELECT VERSION();
+----------------------------------+
| VERSION()                        |
+----------------------------------+
| 10.6.12-MariaDB-0ubuntu0.22.04.1 |
+----------------------------------+
1 row in set (0.000 sec)

Эта информация полезна, когда вам нужно знать, какие функции доступны в текущей версии MySQL, или при устранении проблем, связанных с определенной версией.

Текущая база данных

Чтобы узнать, какую базу данных вы в настоящее время используете:

SELECT DATABASE();

Вывод покажет имя текущей базы данных или NULL, если база данных не выбрана:

MariaDB [mysql]> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| mysql      |
+------------+
1 row in set (0.000 sec)

Это может быть полезно, когда вы работаете с несколькими базами данных и вам нужно подтвердить, в какой из них вы в настоящее время выполняете операции.

Текущий пользователь

Чтобы узнать текущего пользователя:

SELECT USER();

Вы увидите вывод, похожий на следующий:

MariaDB [mysql]> SELECT USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.000 sec)

Это показывает, под каким пользователем MySQL вы вошли в систему и с какого хоста вы подключаетесь. Это полезно для проверки текущих разрешений и деталей подключения.

Статус и переменные сервера

Чтобы просмотреть все индикаторы статуса сервера:

SHOW STATUS;

Эта команда предоставляет обширную информацию о текущем состоянии сервера MySQL, включая различные счетчики и статистику.

Чтобы просмотреть все переменные конфигурации сервера:

SHOW VARIABLES;

Эта команда показывает, как настроен ваш сервер MySQL, включая настройки использования памяти, ограничения подключений и многие другие параметры.

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

SHOW VARIABLES LIKE '%buffer%';

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

Например, вы можете использовать SHOW STATUS для проверки количества выполненных запросов:

SHOW STATUS LIKE 'Questions';

Это может дать вам вывод, похожий на следующий:

MariaDB [mysql]> SHOW STATUS LIKE 'Questions';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions     | 15    |
+---------------+-------+
1 row in set (0.001 sec)

Это показывает, сколько операторов было выполнено сервером с момента его запуска.

Аналогично, вы можете использовать SHOW VARIABLES для проверки важных настроек конфигурации, таких как максимально допустимый размер пакета:

SHOW VARIABLES LIKE 'max_allowed_packet';

Что может дать вывод, похожий на следующий:

MariaDB [mysql]> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.001 sec)

Это показывает максимальный размер одного пакета или любой сгенерированной/промежуточной строки, что может быть важно при работе с большими объемами данных.

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

Резюме

В этом практическом занятии мы рассмотрели основные аспекты управления базами данных в MySQL:

  1. Создание баз данных с использованием как клиента MySQL, так и инструмента mysqladmin
  2. Перечисление существующих баз данных и понимание их назначения
  3. Понимание чувствительности к регистру имен баз данных в MySQL
  4. Безопасное удаление баз данных и важность осторожности при выполнении этой операции
  5. Выбор и переключение между базами данных
  6. Получение важных метаданных о сервере MySQL и базах данных

Эти навыки составляют основу работы с базами данных MySQL. По мере продвижения в изучении баз данных вы будете использовать эти основы для выполнения более сложных операций и задач управления базами данных.