Основы управления базами данных в 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 для создания новой базы данных:

sudo mysqladmin -u root create hello_world2

В этой виртуальной машине LabEx используйте sudo вместе с mysqladmin, так как учетная запись базы данных root использует локальную аутентификацию через сокет.

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

  • sudo: выполняет команду с необходимыми системными привилегиями.
  • -u root: указывает, что мы подключаемся как пользователь базы данных root.
  • 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. Она безвозвратно удаляет базу данных и все её содержимое без запроса подтверждения. В производственной среде (production) перед выполнением таких операций обычно должны быть предусмотрены меры защиты и резервные копии.

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

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

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

sudo mysqladmin -u root drop hello_world2

Вас попросят подтвердить действие:

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, включая параметры использования памяти, лимиты подключений и многие другие параметры.

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

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. По мере продвижения в изучении баз данных вы будете опираться на эти основы для выполнения более сложных операций и задач управления.