MySQL — царица баз

Когда мы гово­ри­ли о том, какие быва­ют базы дан­ных, то немно­го рас­ска­за­ли о реля­ци­он­ных БД. Самый оче­вид­ный при­мер такой базы дан­ных — MySQL. О ней и поговорим. 

⚠️ С фор­маль­ной точ­ки зре­ния MySQL — это не сама база дан­ных, а систе­ма управ­ле­ния базой дан­ных (СУБД). Но в язы­ке так сло­жи­лось, что саму базу и систе­му её управ­ле­ния мы назы­ва­ем одни­ми и теми же сло­ва­ми. Про­сти­те нас за это упрощение. 

Что такое MySQL

MySQL — это реля­ци­он­ная база дан­ных (СУБД). Реля­ци­он­ная — зна­чит внут­ри неё есть дан­ные, кото­рые свя­за­ны меж­ду собой, и эту связь мож­но пред­ста­вить в виде таблиц. 

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

Сра­зу вид­но, что в базе есть три таб­ли­цы, при­чём две из них свя­за­ны меж­ду собой через тре­тью. Если нам пона­до­бит­ся где-то хра­нить дан­ные о достав­ке това­ров, то мы можем это сде­лать в одной из этих таб­лиц или заве­сти новую. 

👉 Всё, что мы дела­ем в MySQL, — созда­ём таб­ли­цы с дан­ны­ми и настра­и­ва­ем свя­зи меж­ду ними.

Кому это нужно

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

Вы може­те обой­тись и без кон­крет­но этой систе­мы управ­ле­ния. Мож­но исполь­зо­вать PostgreSQL или NoSQL. Мож­но про­сто хра­нить дан­ные у кли­ен­та или в «сыром» фай­ли­ке. Но если вы хоти­те делать систе­му, кото­рую будет лег­ко под­дер­жи­вать и пере­дать дру­гим людям для дора­бот­ки и раз­ви­тия, — ско­рее все­го, вы выбе­ре­те MySQL.

Как работают связи в базе данных

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

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

Один ко мно­гим. Когда у нас есть таб­ли­ца с кли­ен­та­ми и таб­ли­ца с их покуп­ка­ми, тут рабо­та­ет связь «один ко мно­гим». Это зна­чит, что у нас одной запи­си о кли­ен­те соот­вет­ству­ет несколь­ко запи­сей об их покуп­ках, напри­мер, если он их сде­лал в раз­ное вре­мя. Бла­го­да­ря этой свя­зи мы можем выве­сти все покуп­ки для каж­до­го кли­ен­та в отдельности.

Ещё при­мер — худож­ни­ки и кар­ти­ны. Каж­дая кар­ти­на при­над­ле­жит толь­ко одно­му худож­ни­ку, но одно­му худож­ни­ку может при­над­ле­жать мно­го раз­ных картин. 

Мно­гие ко мно­гим. А вот это хит­рая связь — для неё нуж­на отдель­ная таб­ли­ца. Смысл такой: мы дела­ем про­ме­жу­точ­ную таб­ли­цу, в кото­рой соеди­ня­ем дан­ные из одной таб­ли­цы с дан­ны­ми из дру­гой. Полу­ча­ет­ся, что в новой таб­ли­це как бы нет дан­ных — в ней толь­ко связи.

Допу­стим, вы ведё­те свой спи­сок дел в еже­днев­ни­ке, где мож­но ста­вить мет­ки для дел. Мет­ки помо­га­ют понять, что за дело перед вами, и выгля­дят при­мер­но так: «в доро­ге», «позво­нить», «на неде­ле», «под­пи­сать у Ива­ны­ча» и «за ком­пью­те­ром». Их мож­но назна­чить любой зада­че — одну мет­ку, две или все сра­зу. Полу­ча­ет­ся так:

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

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

Что может храниться в MySQL

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

Напри­мер, все наши ста­тьи в «Коде» хра­нят­ся в MySQL-базе, с кото­рой мы рабо­та­ем через Ворд­пресс. Там же есть инфор­ма­ция и об авто­рах, и о кар­тин­ках для ста­тей, о дате пуб­ли­ка­ции и о мно­гом дру­гом. Что­бы вы про­чи­та­ли эту ста­тью, сайт обра­тил­ся к базе дан­ных, взял отту­да ста­тью, пра­виль­но её обра­бо­тал и пока­зал вам.

Дру­гие исполь­зу­ют MySQL для рабо­ты с кли­ент­ской базой — в биз­не­се, поли­кли­ни­ках или систе­мах учё­та товаров. 

Самой базе всё рав­но, что в ней хра­нит­ся и как вы этим поль­зу­е­тесь. База дан­ных — это про­сто спо­соб свя­зать дан­ные вме­сте, а потом най­ти в них то, что нужно.

Почему MySQL так популярна

С момен­та сво­е­го появ­ле­ния в 1995 году, MySQL была бес­плат­ной, про­стой и пред­ска­зу­е­мой систе­мой управ­ле­ния база­ми дан­ных. Это при­ве­ло к тому, что её исполь­зо­ва­ли мно­го ком­па­ний по все­му миру, что сде­ла­ло её неглас­ным стан­дар­том для баз данных.

Ещё в MySQL встро­е­ны систе­мы без­опас­но­сти и раз­гра­ни­че­ния досту­па. Напри­мер, мож­но сде­лать так, что­бы мене­джер мог толь­ко вно­сить дан­ные, руко­во­ди­тель отде­ла — изме­нять их, но не уда­лять, а дирек­тор мог делать с дан­ны­ми что угодно.

Но основ­ная при­чи­на попу­ляр­но­сти MySQL — пол­ная под­держ­ка SQL-языка.

Что такое язык SQL

Что­бы рабо­тать с реля­ци­он­ной базой дан­ных, нуж­но знать спе­ци­аль­ный язык запро­сов — SQL. Это рас­шиф­ро­вы­ва­ет­ся как structured query language — язык струк­ту­ри­ро­ван­ных запро­сов. «Струк­ту­ри­ро­ван­ный» озна­ча­ет, что каж­дый запрос дол­жен иметь опре­де­лён­ную струк­ту­ру, что­бы база поня­ла, как на него реагировать. 

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

С помо­щью запро­сов мож­но делать что угодно: 

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

Если вы зна­е­те SQL, то може­те рабо­тать с любой реля­ци­он­ной базой дан­ных, кото­рые его поддерживают. 

А покажите сами запросы

А пожа­луй­ста.

Созда­дим базу дан­ных THECODE_MEDIA:

CREATE DATABASE THECODE_MEDIA;

Ска­жем, что будем даль­ше рабо­тать имен­но с этой базой:

USE THECODE_MEDIA;

Созда­дим таб­ли­цу с назва­ни­я­ми ста­тей, авто­ра­ми и коли­че­ством про­чте­ний за месяц:

CREATE TABLE STATS (name VARCHAR(200), author VARCHAR(20), readers INT);

Загру­зим в таб­ли­цу уже гото­вые дан­ные из файла:

LOAD DATA LOCAL INFILE 'thecode/readers_stat.txt' INTO TABLE STATS;

А теперь выве­дем их на экран:

SELECT * FROM STATS;

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

Рабо­та с MySQL через запро­сы в терминале 

Коротко главное

  1. MySQL — систе­ма управ­ле­ния реля­ци­он­ны­ми база­ми дан­ных. Реля­ци­он­ны­ми — то есть таки­ми, меж­ду кото­ры­ми есть одно­знач­ные про­пи­сан­ные свя­зи. Мож­но пред­ста­вить, что это систе­ма управ­ле­ния таб­лич­ны­ми база­ми данных. 
  2. Таб­ли­цы могут быть свя­за­ны меж­ду собой, что­бы мож­но было про­ще най­ти нуж­ную информацию.
  3. Для рабо­ты с реля­ци­он­ны­ми БД исполь­зу­ют спе­ци­аль­ный язык — SQL.
  4. Каж­дая коман­да в SQL — это запрос к базе, что­бы она что-то нашла, изме­ни­ла, доба­ви­ла или уда­ли­ла у себя.
  5. MySQL исполь­зу­ют уже 25 лет, поэто­му это про­ве­рен­ная и надёж­ная база дан­ных. Кто любит MySQL, тому лег­ко ори­ен­ти­ро­вать­ся в тех­но­ло­ги­ях совре­мен­но­го веба. 

Что дальше

На оче­ре­ди — нере­ля­ци­он­ные базы и NoSQL. Там вооб­ще всё не так, как здесь, поэто­му раз­би­рать будем отдельно.

Текст и иллю­стра­ции:
Миша Поля­нин

Редак­тор:
Мак­сим Ильяхов

Кор­рек­тор:
Ира Михе­е­ва

Иллю­стра­тор:
Даня Бер­ков­ский

Вёрст­ка:
Маша Дро­но­ва

Достав­ка:
Олег Веш­кур­цев