Система управления базами данных MySQL
База данных — это специально созданное хранилище важной информации, неотъемлемым атрибутом которого является удобный доступ ко всем хранящимся данным. Для обеспечения этого доступа используются так называемые системы управления базами данных или просто СУБД, представляющие собой особые приложения на базе определенной программной архитектуры.
Одной из самых популярных СУБД на сегодняшний день является MySQL, распространяемая свободно (с некоторыми ограничениями). Эта серверная система способна эффективно функционировать во взаимодействии с интернет-сайтами и веб-приложениями. При этом она проста в освоении, что лишь увеличивает ее популярность, особенно среди «айтишников»-любителей.
Примечательно, что результатом огромной популярности MySQL стало появление в интернете множества руководств по освоению системы, а также огромного количества всевозможных плагинов и расширений, упрощающих работу с этой системой. Это в свою очередь лишь придало системе еще большей популярности.
Несмотря на отсутствие некоторого функционала, имеющегося у других СУБД, MySQL обладает достаточно обширным разнообразием доступных инструментов для создания приложений.
Помимо универсальности и распространенности СУБД MySQL обладает целым комплексом важных преимуществ перед другими системами. В частности следует отметить такие качества как:
- Простота в использовании. MySQL достаточно легко инсталлируется, а наличие множества плагинов и вспомогательных приложений упрощает работу с базами данных.
- Обширный функционал. Система MySQL обладает практически всем необходимым инструментарием, который может понадобиться в реализации практически любого проекта.
- Безопасность. Система изначально создана таким образом, что множество встроенных функций безопасности в ней работают по умолчанию.
- Масштабируемость. Являясь весьма универсальной СУБД, MySQL в равной степени легко может быть использована для работы и с малыми, и с большими объемами данных.
- Скорость. Высокая производительность системы обеспечивается за счет упрощения некоторых используемых в ней стандартов.
Как и любой программный продукт, система MySQL имеет определенные ограничения в своем функционале, что не позволяет использовать ее для работы с приложениями, имеющими некоторые специфические требования. К недостаткам этой СУБД относятся:
- Недостаточная надежность. В вопросах надежности некоторых процессов по работе с данными (например, связь, транзакции, аудит) MySQL уступает некоторым другим СУБД.
- Низкая скорость разработки. Как и многим другим программным продуктам с открытым кодом, MySQL не достает некоторого технического совершенства, что порой сказывается на эффективности процессов разработки.
Сам факт того, что MySQL является самой популярной СУБД на рынке, говорит об ее универсальности и предпочтительности в большинстве ситуаций. В частности ее используют в следующих ситуациях:
- при распределённых операциях, когда функционала SQLite (другая популярная система) не хватает;
- когда требуется обеспечить высокий уровень безопасности, что MySQL делает с успехом;
- для работы с интернет-страницами и веб-приложениями, поскольку MySQL является наиболее удобной СУБД для этой сферы применения;
- при работе со специфическим проектом, где функционал MySQL дает оптимальный результат.
Тем не менее, существуют ситуации, когда от MySQL всё же следует отказаться в пользу других СУБД. Например, она не годится, если:
- нужно соответствовать стандарту SQL, который данная система поддерживает лишь частично;
- проект предусматривает многопоточность данных, поскольку при осуществлении параллельных операций чтения/записи у MySQL могут возникать проблемы;
- имеющийся функционал MySQL не способен обеспечить весь набор возможностей работы с базой данных.
обзор, плюсы и минусы – Timeweb Cloud
При работе над проектом у разработчика возникает дилемма: какую базу данных выбрать? С развитием технологий появилось большое количество разнообразных вариантов со своими особенностями. Выбор правильной базы данных стал отдельной проблемой. Ведь это решение повлияет на весь проект.
MySQL — это популярная система управления базами данных. Первая версия этой СУБД была выпущена в 1994 году компанией MySQL AB. В 2008 году эту компанию приобрела Sun Microsystems, которую, в свою очередь, приобрела Oracle в 2010 году.
По распространенности MySQL уступает Oracle Database. Так получилось, что двумя самыми популярными система управления базами данных владеет Oracle. Разработчики уважают и выбирают MySQL за производительность и безопасность. В этой статье расскажем о преимуществах и недостатках и для чего нужна база данных MySQL.
Преимущества MySQL
Производительность
Для веб-приложений важна скорость работы. Пользователь не будет ждать загрузки страницы — он просто уйдет с неё, если приложение не будет работать достаточно быстро. В плане производительности приложения «болезненным» местом является база данных, и MySQL не подведет вас.
Кроссплатформенность
MySQL предоставляет кроссплатформенную базу данных: она работает на Linux, FreeBSD и конечно на Windows. Этот критерий нужно учитывать при выборе СУБД для проектов, нацеленных на несколько платформ, в частности веб-приложений. К слову, MySQL входит в состав популярных стеков для разработки веб-приложений — LAMP (Linux, Apache, MySQL, PHP) и WAMP (Windows, Apache, MySQL, PHP).
Бесплатная СУБД
Oracle развивает MySQL как проект с открытым исходным кодом, что позволяет сообществу вносить в него свой вклад и, при необходимости, адаптировать его под свои задачи. СУБД предоставляется для конечных пользователей бесплатно. Многие компании выбирают в качестве СУБД MySQL из-за того, что она бесплатна.
Oracle предлагает клиентам некоторые проприетарные модули с закрытым кодом, для использования которых потребуется денежное вложение. Но эти модули нужны не всем и не всегда.
Выбор движков
Движок базы данных (database engine) — это программный модуль, с помощью которого СУБД создает, читает и обновляет данные в базе. В MySQL есть два типа движков: транзакционные и нетранзакционные. Транзакционные движки хранения данных подразумевают, что операции в этих БД могут быть отменены, если они не завершены.
Всего MySQL поддерживает 8 движков:
InnoDB — это распространенный движок, который используется в MySQL по умолчанию. Он поддерживает ACID, блокировку на уровне строк, восстановление после сбоев и многопоточность. Также это единственный движок, который обеспечивает ограничение ссылочной целостности внешнего ключа. Oracle советует использовать именно InnoDB, за исключением ряда случаев.
MyISAM — этот движок использовался по умолчанию до появления InnoDB. И в отличие от него, MyISAM не поддерживает ACID. В этом движке реализована блокировка только на уровне таблиц, поэтому он небезопасен для транзакций. В тоже время MyISAM оптимизирован для чтения. Сфера применения MyISAM — это системы хранения с минимальными транзакционными данными.
Memory — этот движок реализуется хранение данных в памяти в виде кучи. Такая система обеспечивает очень быстрый доступ к данным. Memory поддерживает блокировку на уровне таблиц и хранит данные в оперативной памяти — при перезагрузке сервера они теряются. Этот движок подходит для временных таблиц.
CSV — этот движок хранит данные в файлах формата . csv. Не поддерживает индексирование и разделение. CSV используется для обмена данными между различными программами или приложениями.
Merge — движок работает с таблицами MyISAM. Он логически группирует ряд идентичных таблиц MyISAM и ссылается на них, как на один объект. Merge упрощает управление большими объемами данных и используется в системах хранения данных.
Archive — этот движок оптимизирован для высокоскоростной вставки. При вставке он сжимает данные. Archive не поддерживает транзакции, операции DELELE и UPDATE, но зато поддерживает блокировку на уровне строк. Отлично подходит для хранения больших объемов архивных данных, на которые редко ссылаются.
Federated используется создания одной БД на нескольких физических серверах. Подходит для распределенных систем.
Движок Blackhole принимает данные, но не сохраняет их. На первый взгляд этот движок бесполезен, но на самом деле он находит применение при репликации данных и тестировании. Blackhole можно использовать в качестве фильтра между серверами.
Безопасность
MySQL предлагает пользователям высокий уровень безопасности. В MySQL есть встроенные инструменты безопасности, которые поддерживают управление пользователями и их привилегиями. При недостатке стандартных инструментов пользователь всегда может установить дополнительные плагины.
Сообщество
Большое и развитое сообщество MySQL не оставит пользователя одного с проблемой. Кроме того, благодаря сообществу на базе MySQL появились новые системы управления базами данных — Drizzle, OurDelta, Percona Server и, самый популярный, MariaDB.
Минусы MySQL
Работа с большими базами
При работе с малыми и средними приложениями MySQL радует пользователей, но при увеличении объемов информации у MySQL возникают проблемы. Речь идет о базах данных с миллионами строк. Такие БД тяжело масштабировать, а сложные запросы к ним начинают буксовать и иногда не успевают выполняться в допустимое время ожидания. Для решения проблемы с запросами придется прилагать усилия для их оптимизации.
Большие объемы информации— это сфера применения для Oracle Database или SQL Server, а не MySQL.
SQL
MySQL не соответствует стандарту SQL: СУБД не поддерживает некоторые функции и имеет расширения, не относящиеся к стандартному SQL. Для большинства проектов это не станет серьезной проблемой, но при миграции на другие СУБД этот момент может всплыть.
Развитие
MySQL — это проект с открытым исходным кодом, что негативно сказывается на скорости его развития. Сообщество разработчиков сосредоточено в первую очередь на поддержку уже существующих функций, а Oracle, с учетом наличия проприетарных модулей для MySQL с закрытым кодом, не сильно заинтересованы в развитии проекта.
Сфера применения
MySQL достаточно универсальная система управления базами данных. При выборе MySQL в качестве СУБД нужно отталкиваться от требований проекта. В целом, MySQL находит применение в:
- малых и средних веб-приложениях;
- проектах с требованиями к безопасности;
- в случаях, когда встроенных систем управления базами данных (например SQLite) не хватает, а продукты уровня Oracle Database или SQL Server избыточны;
- проектах, подразумевающих производительность.
Но, несмотря на универсальность MySQL, в некоторых случаях стоит от неё отказаться в пользу других решений:
- проект подразумевает строгое соответствие стандарту SQL;
- в проекте необходим функционал, который не может предоставить MySQL «из коробки»;
Заключение
MySQL — это система управления базами данных, которая покажет себя при работе с небольшими проектами. Но, как и других продуктов, у MySQL есть плюсы и минусы. Это нужно учитывать, если захотите использовать MySQL в качестве СУБД.
Если вы решили выбрать MySQL, но только начинаете с ней работать, вам поможет наша статья «Основы MySQL».
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.
mysql.
Повторяющееся использование внешних ключей здесь недопустимо?Я создаю систему инвентаризации, которая использует ряд зон и секторов наряду с местами хранения. Каждая зона представляет собой площадь здания. Каждый сектор является просто подразделением этой зоны. Окончательные местоположения будут помечены как мусорные ведра. На моей диаграмме таблица «Корзины» имеет «warehouse_id» в качестве внешнего ключа. Этот ‘warehouse_id’ также находится в таблицах Sectors и Zones. Нужно ли мне, чтобы эти внешние ключи повторялись так? Я понимаю, что могу получить ‘warehouse_id’ из местоположения корзины через другие отношения.
Я хочу удалить дубликат ‘warehouse_id’ из моей таблицы секторов, чтобы избежать дублирования данных. Стоит ли это пространства данных? Или это сделает запросы намного сложнее? Если бы в моей таблице Bins был только ‘sector_id’, я мог бы добраться до таблицы секторов, затем до зон, а затем до складов, чтобы узнать, что такое склад?
Прошло несколько лет, и я освежаю знания SQL. Создание этой системы инвентаризации, а затем погружение в запросы. У меня довольно хорошее понимание общего программирования и информатики, но базы данных не моя сильная сторона.
Я обновил некоторые таблицы, адреса сверху обрезаны, но меня беспокоила избыточность инвентаря.
- MySQL
- SQL
2
Вы избыточно храните внешние ключи в таблицах Sectors
и Bins
, что может привести к возникновению аномалий данных.
Например:
Корзины:
бин_ид | id_сектора | идентификатор_зоны | идентификатор_склада |
---|---|---|---|
1234 | 4567 | 789 | 6 |
Секторы:
ИД_сектора | идентификатор_зоны | идентификатор_склада |
---|---|---|
4567 | 890 | 17 |
Зоны:
идентификатор_зоны | идентификатор_склада |
---|---|
789 | 45 |
890 | 121 |
Очевидно, некоторые из этих значений содержат ошибки, но какие? Верны ли значения в ячейках
, а в других таблицах есть ошибки или наоборот? Как вы это понимаете?
Чтобы устранить возможные аномалии данных, нужно избегать избыточного хранения атрибутов. В ячейках
, сохраните только внешний ключ ector_id
и избавьтесь от zone_id
и inventory_id
секторах
избавьтесь от складских_идентификаторов
.Если вы сделаете это, вы получите то, что называется нормализованной структурой базы данных , и это отличный способ защитить ее от ошибок.
Это требует, чтобы вы написали запросы с соединениями, если вам нужен результат запроса, чтобы связать корзину с соответствующей зоной или складом.
Не принимать во внимание жесткий. Это обычный способ использования SQL.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
mysql — springboot не может подключиться к mysql8.
0java.sql.SQLException: доступ запрещен для пользователя «root» @ «localhost» (с использованием пароля: YES) в com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.28.jar:8.0.28] в com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.28.jar:8.0.28] в com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829) ~[mysql-connector-java-8.0.28.jar:8.0.28] в com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:449) ~[mysql-коннектор-java-8.0.28.jar:8.0.28] в com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242) ~[mysql-connector-java-8.0.28.jar:8.0.28] в com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.28.jar:8.0.28] на com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3. 4.5.jar:na] на com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] на com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] на com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) [HikariCP-3.4.5.jar:na] на com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) [HikariCP-3.4.5.jar:na] в com.zaxxer.hikari.pool.HikariPool. (HikariPool.java:115) [HikariCP-3.4.5.jar:na] на com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) [HikariCP-3.4.5.jar:na]
это application.yml
весна: источник данных: имя-класса-драйвера: com.mysql.cj.jdbc.Driver имя пользователя: корень пароль: 000000 URL-адрес: jdbc:mysql://127.0.0.1:3306/student?useUnicode=true&characterEncoding=utf8&serverTimezone=CST
это пользовательская таблица mysql:
Я попытался изменить файл yml и настройки базы данных, но не удалось, проблема в версии mysql?
- mysql
- весенняя загрузка
2
проблема в версии mysql?
Нет, это не так.