Что такое MySQL - как работает СУБД, области применения и преимущества- Академия Selectel

Что такое MySQL

Анна Ушакова
Анна Ушакова Младший DevOps-инженер
18 июля 2024

В этом материале рассмотрим основные понятия, функциональные возможности, преимущества и недостатки MySQL.

Изображение записи

MySQL —  реляционная система управления базами данных (СУБД) с открытым исходным кодом, основанная на языке SQL. Это одна из наиболее популярных СУБД, востребованная среди разработчиков и администраторов, особенно на небольших и средних проектах. MySQL бесплатно распространяется и поддерживается корпорацией Oracle и сообществом разработчиков.

Принцип работы MySQL

MySQL, по сути, нужна, чтобы создавать в базах данных таблицы и настраивать связи между ними. На этом основано управление БД, запись и извлечение информации из них. Принцип работы СУБД основан на клиент-серверной модели.

Отображение базы данных в MySQL на Windows.
Отображение базы данных в MySQL на Windows. Источник.

Сервер — это компьютер, на котором хранятся базы данных. Клиент — это программное обеспечение, которое отправляет запросы на сервер MySQL для выполнения операций. Собственно, на этих запросах, написанных на языке SQL, и строится взаимодействие между клиентом и сервером.

Клиент-серверная модель.
Клиент-серверная модель. Источник.

Возможности MySQL

Популярность MySQL можно объяснить несколькими ее особенностями. Это бесплатно распространяемое ПО со встроенными системами безопасности и разграничения доступа. К тому же, система очень гибкая, производительная и функциональная. И, конечно, важное значение имеет полная поддержка языка SQL. Впрочем, разберемся с тем, что MySQL предлагает пользователям.

Реляционная модель

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

Важно отметить, что реляционная модель — лишь один из множества подходов к организации данных. Также есть иерархическая, сетевая и объектно-ориентированная модели.

Язык запросов

SQL — сокращение от Structured Query Language (язык структурированных запросов). Этот язык предоставляет обширные возможности для фильтрации, сортировки, группировки и объединения данных. Он широко распространен и поддерживается многими другими СУБД (например, PostgreSQL или NoSQL). Это означает, что знания и навыки, полученные при работе с MySQL, могут быть применены и в других реляционных базах данных.

Транзакции

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

Индексы

Это структуры данных, которые ускоряют выполнение запросов к БД. Они ускоряют поиск, сортировку и объединение данных в таблице. Индексы создают дополнительную структуру, которая содержит отсортированные значения столбцов и ссылки на соответствующие строки таблицы.

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

В MySQL несколько типов индексов, включая B-дерево, хеш-индекс и полнотекстовый индекс. Каждый из них имеет свои особенности и подходит для определенных запросов. Например, хеш-индекс используют для быстрого поиска по точному значению. B-дерево подходит для обычных запросов на поиск по значениям столбцов. А полнотекстовый индекс используется для выполнения поиска по текстовым данным.

Безопасность

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

Кроме этого, в MySQL можно определять роли пользователей. Роли — это набор привилегий для доступа к базам данных и таблицам, а также для определения разрешенных операций.

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

Триггеры и хранимые процедуры

Триггеры в MySQL — это специальные объекты, которые реагируют на определенные события. Ими могут быть, например, вставка, обновление или удаление данных в таблице. Когда событие происходит, триггер выполняет набор команд или вызывает хранимую процедуру.

Триггер создается довольно просто:

mysql> CREATE TRIGGER <trigger name> <trigger time > <trigger event>
              ON <table name>
              FOR EACH ROW
              <trigger body>;
  • <trigger_name> — уникальное имя триггера.
  • <trigger time > — указывает, когда сработает триггер. Доступны варианты BEFORE и AFTER.
  • <trigger_event> — событие, на которое реагирует триггер. Доступны INSERT, UPDATE и DELETE.
  • <table_name> — имя таблицы в базе данных, для которой будет действовать триггер.
  • Строка FOR EACH ROW указывает, что триггер применяется для каждой строки, которой коснулось изменение.

Рассмотрим на примере:

mysql> DELIMITER //
mysql> CREATE TRIGGER after_insert_student
              AFTER INSERT ON student
              FOR EACH ROW
              BEGIN
              -- Insert a record into the student_log table to log the insertion
              INSERT INTO student_log (action, timestamp)
              VALUES ('INSERT', NOW());
              END;
              //
             DELIMITER ;

Когда в таблицу Student вставляется новая строка, триггер добавляет соответствующую запись в таблицу Student_log. Это обычная практика ведения журнала, позволяющая отслеживать изменения в таблице учащихся. Разберемся подробнее:

  • триггер называется after_insert_student и запускается после операции вставки (AFTER INSERT) в таблицу учеников.
  • FOR EACH ROW указывает, что триггер будет выполняться для каждой строки, в которую добавили новые данные.
  • вся логика триггера (что именно он делает) описана между функциями BEGIN и END.
  • Функция NOW() возвращает текущую временную метку, которая записывает время вставки в таблицу Student_log.

Хранимые процедуры — это набор инструкций, которые сохраняются в БД и вызываются для выполнения операций. Он может принимать параметры и возвращать результаты. Такие процедуры используют для выполнения сложных операций, которые требуют нескольких шагов или повторяются в разных частях приложения.

Все вместе позволяет автоматизировать работу, повысить производительность и упростить разработку.

Поддержка различных платформ

MySQL доступен для различных операционных систем, включая Windows, Linux и macOS. Его также можно интегрировать с различными языками программирования: PHP, Python, Java и другими.

Основные функции MySQL

MySQL предоставляет множество функций для управления данными. Базовые действия можно выполнять с помощью команд.

  • Создание базы данных — команда CREATE DATABASE.
  • Вставка данных — команда INSERT.
  • Обновление данных — команда UPDATE.
  • Удаление данных — команда DELETE.
  • Извлечение данных — команда SELECT.

Помимо этого, пользователь может выполнять и более сложные действия:

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

Преимущества MySQL

К основным преимуществам MySQL можно отнести простоту использования, открытый исходный код и безопасность. А еще СУБД в большинстве случаев распространяется бесплатно.

Лицензия GNU GPL

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

Открытый исходный код

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

Язык запросов SQL

Для работы с этой СУБД достаточно базовых знаний SQL. Большинство задач можно выполнить, умея работать всего с несколькими простыми командами. Их примеры мы рассмотрели выше.

Безопасность

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

Недостатки MySQL

Ограничения лицензии

Выше мы назвали лицензию GNU GPL одним из преимуществ MySQL. Теперь посмотрим на важное ограничение. Если продукт включает исходные коды MySQL, то и его исходный код должен быть открытым. Если компания-разработчик ПО не готова к этому, она может воспользоваться коммерческой версией СУБД и вести закрытую разработку. Важно учитывать это до начала работы с MySQL, если ее бесплатность является одним из критериев выбора СУБД.

Отсутствие расширенных возможностей

MySQL часто не может предложить расширенные возможности SQL в отличие от других СУБД. Например, она не поддерживает распределенные вычисления. Они необходимы приложениям, которые работают с большими данными. А при увеличении количества одновременных транзакций MySQL может работать неоптимально. Это приводит к увеличению времени отклика.

Отличия MySQL от других СУБД

MySQL предлагает несколько уникальных функций и возможностей, которых нет в других СУБД.

  • Автоматическое сегментирование. Актуально, когда наборы данных настолько велики, что хранить их целиком в одной БД нецелесообразно. Автоматическое сегментирование позволяет разделять их на блоки поменьше — сегменты, каждым из которых легче и быстрее управлять. По сути, это инструмент оптимизации управления пространством.
  • Возможность создания пользовательских хранимых процедур и функций на SQL.
  • MySQL поддерживает различные методы шифрования данных для обеспечения безопасности.
  • Встроенный парсер позволяет работать с данными в формате JSON без необходимости в дополнительных библиотеках.

Отличие от PostgreSQL

PostgreSQL, в отличие от MySQL, акцентирует внимание на полной поддержке стандартов ANSI/ISO SQL и принципов ACID (atomicity, consistency, isolation, durability, то есть атомарности, согласованности, изолированности и устойчивости) для обеспечения надежности и целостности данных. Также PostgreSQL часто используют в крупных корпоративных системах, включая Google, GitHub, NASA, Tesla и Twitter. Кроме того, СУБД занимает более высокие позиции в рейтингах баз данных по сравнению с MySQL.

Отличие от SQLite

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

Каждая из этих СУБД имеет свои особенности и преимущества, и выбор между ними зависит от конкретных потребностей и требований проекта.

Что предлагает Selectel

Облако для MySQL — это готовый кластер баз данных c полусинхронной или синхронной репликацией на выбор. Мы предусмотрели ограничения лицензии GNU GPL, поэтому продукт подойдет для закрытой разработкой коммерческого проекта.

В зависимости от навыков и собственных требований вы можете легко и быстро запустить MySQL через панель управления. Если требуется более тонкая настройка, можно воспользоваться Terraform или API. Кстати, оба варианта подходят и для масштабирования конфигурации при увеличении нагрузки.

В небольших проектах и стартапах MySQL можно использовать как OLTP-базу данных или хранилище для CMS. При этом оплата происходит по модели pay-as-you-go. В проектах побольше все работы по запуску и большую часть задач по настройке базы данных можно поручить специалистам Selectel. Например, они могут оптимизировать параметры СУБД, настроить реплики отказоустойчивого кластера, настроить служебные компоненты, связать MySQL с другими услугами и так далее.

В контексте безопасности система привилегий MySQL наделяет каждую учетную запись правами на ряд определенных действий, которые можно осуществлять с данными. Делать это можно не только на уровне всей базы данных и отдельно взятой таблицы. Кроме того, облако предлагает SLA 99,95%, круглосуточную техподдержку и полное соответствие инфраструктуры 152-ФЗ на случай, если проект предусматривает работу с персональными данными.