Uploaded by sasha1982161082

Практический MySQL Пособие для быстрого старта для начинающих Игонин С.В.

advertisement
Игонин С.В.
Практический MySQL
пособие для быстрого старта
для начинающих
Саратов 2019
Практический MySQL. Пособие для начинающих.
2
Оглавление
1 Введение в Базы Данных ...........................................................................................................3
2 Нормализация БД. ......................................................................................................................4
1NF ..............................................................................................................................................5
2NF ..............................................................................................................................................6
3NF ..............................................................................................................................................6
Общее правило при проектировании БД (для начинающих) ................................................7
3 Регистрация БД на хостинге ......................................................................................................8
4 Скачивание MySQL ....................................................................................................................8
5 Подключение к БД через командную строку ..........................................................................8
6 Подключение к БД через MySQL Command Line Client ........................................................9
7 Основные команды MySQL .....................................................................................................10
7.1 Создание таблицы..............................................................................................................10
7.2 Вставка строки в таблицу (добавление записей) ............................................................11
7.3 Удаление строки из таблицы. ...........................................................................................11
7.4 Выборка строк из таблицы ...............................................................................................11
7.4.1 Простой SELECT по одной таблице. ........................................................................11
7.4.2 Сложный SELECT по трем таблицам с вложенным SELECT. ...............................12
7.4.3 Разновидности JOIN ...................................................................................................14
7.5 Изменение значений в ячейках таблицы .........................................................................15
8 Дамп и Восстановление ...........................................................................................................15
Практический MySQL. Пособие для начинающих.
3
1 Введение в Базы Данных
База данных (БД) – это информационная модель, позволяющая упорядоченно хранить
данные о группе объектов, обладающих одинаковым набором свойств.
Информация в БД хранится в упорядоченном виде. Например, записная книжка, классный
журнал, библиотечный каталог.
Система управления базами данных (СУБД) – программа, позволяющая выполнять
операции с БД и, хранимой в ней информацией: создание, изменение, извлечение
(данных), удаление.
Типы БД:
1. Иерархическая – один элемент главный,
остальные подчиненные. Присутствует связь
между элементами по вертикали. Например,
дерево каталогов файловой системы, список
населенных
пунктов
страны
(страна
>
область > город > район)
2. Сетевая БД – помимо вертикальных,
можно устанавливать и горизонтальные
связи.
3.
Реляционная
БД
(англ.
Relation
–
отношение, связь) – совокупность связанных
между собой таблиц.
Для каждого столбца реляционной БД задан тип. В столбце всегда хранятся значения
одного типа.
Запись – одна строка таблицы с данными.
Поле – значение, хранимое в столбце записи (грубо говоря, это ячейка таблицы).
Практический MySQL. Пособие для начинающих.
4
2 Нормализация БД.
Целью нормализации БД является устранение недостатков структуры базы данных,
приводящих к избыточности, которая, в свою очередь, потенциально приводит к
различным аномалиям и нарушениям целостности данных.
Но прежде познакомимся с понятием Ключ.
1. Первичный ключ – столбец, в полях которого значения уникальны (не повторяются)
для каждой записи в таблице.
1.1 Простой ключ (следует из логики БД) – ИНН, СНИЛС, номер читательского
(плохой пример)
1.2 Составной – состоит из двух и более столбцов (Фамилия Имя в БД класса
школы, плохой пример)
1.3 Уникальный номер
–
например, числовой
ID
(см.
VK) или
GUID
(универсальный в глобальном масштабе Вселенной)
2 Вторичный (внешний) ключ – устанавливается для столбцов в подчиненной таблице и
указывает на один из столбцов в главной таблице (обычно на первичный).
Нормализация – процесс приведения к нормальной форме. Всего форм насчитывается по
различным источникам от 8 до 10. Познакомимся с первыми тремя, что, на данный
момент, достаточно для практических целей.
1NF – Атомарность значений (неделимость значения в каждом поле). В одном поле
хранится одно значение.
2NF – Все неключевые поля не должны быть зависимы от первичного ключа. В таблице
необходимо хранить данные, непосредственно связанные с ней и не имеющие отношения
к другой сущности. Данная форма решает вопрос нахождения дублирующихся данных.
Различные сущности необходимо выносить в отдельные таблицы.
В других источниках, вторую форму относят к БД, в которых имеются составные ключи.
Неключевые поля не могут зависеть от части составного ключа. Они должны зависеть от
составного ключа как единого целого (сразу от всех столбцов ключа одновременно).
3NF – Отсутствуют неключевые поля, зависящие от других неключевых полей.
Практический MySQL. Пособие для начинающих.
5
Проанализируем ненормализованную таблицу 1. Найдем, какая форма нормализации
нарушена. И приведем к нормализованному виду.
Таблица 1
LIBRARY
title
author
reader_name
Информатика
Л.Л. Иванов,
А. Ж. Петров
Р.М. Сидоров
Информатика
Л.Л. Иванов,
А. Ж. Петров
А.Д. Капрал
Математика
А.Ж. Петров
Р.М. Сидоров
reader_address
Саратовская обл.,
г. Саратов,
Московская XX
Саратовская обл.,
г. Энгельс, ул.
Тельмана ХХ
Саратовская обл.,
г. Саратов,
Московская XX
return_date
01.01.2021
01.01.2021
01.01.2021
1NF
В столбце author в первой и второй строке в полях записано по два автора, что не
удовлетворяет 1NF. Чтобы привести БД к 1NF вынесем информацию о книгах в
отдельные таблицы. Обратите внимание на новый столбец id (Таблица 2), который мы
добавили к каждой таблице. Это первичный ключ в виде уникального номера.
Интересна таблица BOOK_AUTHOR, которая связывает таблицы BOOKS и AUTHORS. Отличный
пример реляционности БД. Может показаться, что в этой таблице отсутствует столбец,
хранящий первичный ключ. На самом деле он составной. Сочетание book_id –
уникально для каждой строки данной таблицы. В свою очередь, данные
author_id
столбцы являются и вторичными ключами. Они внешние ключи по отношению к
таблицам BOOKS и AUTHORS, соответственно.
Таблица 2
id
book_id
1
1
2
1
3
3
BOOKS
LIBRARY
reader_address
Саратовская обл.,
Р.М. Сидоров
г. Саратов,
Московская XX
Саратовская обл.,
А.Д. Капрал
г. Энгельс, ул.
Тельмана ХХ
Саратовская обл.,
Р.М. Сидоров
г. Саратов,
Московская XX
AUTHORS
reader_name
id
title
id
1
Информатика
2
Литература
3
Математика
return_date
01.01.2021
01.01.2021
01.01.2021
BOOK_AUTHOR
name
book_id
author_id
1
Л.Л. Иванов
1
1
2
К.К. Кононов
1
3
3
А. Ж. Петров
2
2
3
3
Практический MySQL. Пособие для начинающих.
6
2NF
Столбцы reader_name, reader_address из таблицы 2 (LIBRARY) явно имеют отношение к
другой сущности. Их необходимо вынести в отдельную таблицу. Можно сказать, что во
2NF все строки имеют уникальный номер ID. В неключевых полях отсутствуют
повторяющиеся значения. Имеется ввиду, что по вертикали все данные различны. БД из
таблицы 3 приведена к 2NF.
Таблица 3
CREDITS
id
book_id reader_id return_date
1
1
1
01.01.2021
2
1
2
01.01.2021
3
3
1
01.01.2021
READERS
id
reader_name
1
Р.М. Сидоров
2
А.Д. Капрал
3
И.Э. Деканская
state
city
Саратовская обл. Саратов
address
Московская XX
Саратовская обл. Энгельс ул. Тельмана ХХ
Пензенская обл.
Books
Authors
Тарханы ул. К.Маркса ХХ
Book_Author
id
title
id
name
book_id
author_id
1
Информатика
1
Л.Л. Иванов
1
1
2
Литература
2
К.К. Кононов
1
3
3
Математика
3
А. Ж. Петров
2
2
3
3
3NF
В READERS столбцы state, city, address не зависят от конкретного читателя с его id
(по данному адресу может проживать несколько читателей). Зато зависят друг от друга:
адрес от города, город от области. Можно вынести области в отдельную таблицу STATES,
указав для каждой области id. Города вынести в таблицу CITIES, в которой один столбец
будет ссылаться на область. Тогда в таблице READERS в 3NF вместо двух столбцов state и
city,
будет один city_id.
Нормализация – хорошо, но всему необходимо знать меру. Столбец address в таблице
READERS
оставим без изменений.
Практический MySQL. Пособие для начинающих.
7
Общее правило при проектировании БД (для начинающих)
Выделять в объеме имеющихся данных максимальное количество сущностей и
выносить их в разные таблицы (в разумных пределах). Каждая строка таблицы
имеет свой id (первичный ключ). Связь между таблицами осуществляется через эти
id
с использованием вторичных ключей (столбцы типа book_id, author_id).
Практический MySQL. Пособие для начинающих.
8
3 Регистрация БД на хостинге
Регистрируем БД с возможностью удаленного доступа, например, по ссылке
https://www.db4free.net/signup.php
Выписываем на листочек (впоследствии теряем его) данные для входа
db name: ****
login:
****
password: ****
server:
db4free.net
port:
3306
4 Скачивание MySQL
Скачиваем и устанавливаем MySQL.
https://dev.mysql.com/downloads/installer/
В данном установочном пакете содержится много утилит. При установке переключаемся
на Custom Install и выбираем из списка необходимые утилиты.

MySQLServer

MySQLConnector / .NET
После установки конфигурировать Server не обязательно, поскольку MySQL будет
находиться на удаленном сервере. Нам понадобиться только утилита MySQL Command
Line Сlient для подключения к БД на удаленном сервере.
MySQL – это СУБД (SQL от англ. Structured Query Language – язык структурированных
запросов).
5 Подключение к БД через командную строку
Открываем командную строку: Window + R >> cmd
Переходим в каталог, в котором располагается файл mysql.exe, с использованием
команды cd:
cd C:\Program Files\MySQL\MySQL Server 8.0\bin\
либо выполняем команду
setx /MPATH "%PATH%; C:\Program Files\MySQL\MySQL Server 8.0\bin\
Практический MySQL. Пособие для начинающих.
9
Команда setx позволяет добавить директорию к переменной среды PATH. В PATH
содержатся пути к директориям, в которых Windows автоматически пытается найти
исполняемые файлы и библиотечные модули. Добавив путь к файлу mysql.exe в
переменную среды PATH, мы избавимся от необходимости для запуска mysql.exe каждый
раз переходить в каталог MySQL SERVER 8.0\bin\ с использованием команды cd. Если
директория была добавлена в PATH, то команду cd C:\Program Files\MySQL\MySQL
Server 8.0\bin\
можно не выполнять.
6 Подключение к БД через MySQL Command Line Client
Открываем mysql.exe и передаем параметры для подключения к БД:
mysql –u <user_name> -p –h db4free.net
-u
задает имя пользователя (login), здесь и далее треугольные скобки не пишутся,
-p
означает, что для подключения необходимо ввести пароль,
-h
задает имя сервера (host) (server).
Прим.:расширение .exe можно не указывать.
Вводим пароль, если подключение прошло успешно, откроется приложение mysql.exe в
режиме командной строки. Теперь можно вводить команды MySQL. Прежде чем
общаться с БД, ее необходимо выбрать. Поэтому первая команда:
USE <database_name>;
Следующая команда показывает все таблицы, имеющиеся в БД
SHOW TABLES;
Для выхода из mysql.exe необходимо выполнить команду exit.
Практический MySQL. Пособие для начинающих.
10
7 Основные команды MySQL
Изучение команд будем производить на примере создания и заполнения БД
«Библиотека»,
которую можно представить следующей схемой
первая строка – название таблицы,
вторая строка – названия столбцов,
третья строка – типы данных в столбцах.
7.1 Создание таблицы
Для создания таблицы используется команда CREATE TABLE (записывается в одну
строчку без переносов строк):
CREATE TABLE IF NOT EXISTS readers(
id INT
AUTO_INCREMENT,
name VARCHAR(255),
surname VARCHAR(255),
PRIMARY KEY(id)
);

Ключевое слово AUTO_INCREMENT, означает, что, при добавлении к таблице новой
строки, значение в поле столбца (id) заносится автоматически. Каждый раз при
добавлении строки, это значение будет увеличиваться на единицу (инкремент).
Таким образом, в столбце id будут отсутствовать повторяющиеся значения, что
позволит однозначно идентифицировать строку. Ключевое слово PRIMARY KEY(id)
означает, что значения в столбце id будут являться первичными ключами.

Чтобы задать столбец в качестве вторичного ключа, через запятую после PRIMARY
KEY
указывают
FOREIGN
KEY(столбец_вторичного_ключа)
внешняя_таблица(столбец_первичного_ключа).
REFERENCES
Практический MySQL. Пособие для начинающих.

VARCHAR(255)
11
– тип данных для хранения символов. Число в скобках означает, под
сколько символов будет выделена память для полей данного столбца.

Нельзя создать таблицы с одинаковыми именами. Без фразы IF NOT EXIST, при
попытке создать существующую таблицу, скрипт выдаст ошибку.

Оставшиеся три таблицы создайте самостоятельно.
7.2 Вставка строки в таблицу (добавление записей)
Запись – это информация, хранящаяся в таблице БД в виде строки. Вставка строки
осуществляется командой INSERT INTO ... VALUES ...
INSERT INTO readers(name, surname) VALUES(“Ivan”, “Pupkin”);
Обратите внимание на порядок следования столбцов и добавляемых значений. Между
ними имеется прямое соответствие. Столбец name стоит на первой позиции, значит, в
столбец name будет записано первое значение из скобок VALUES (т.е. “Ivan”). Как и в
языках программирования, строки записываются в двойных кавычках. В readers
отсутствует столбец id, поскольку значения в его поля заносятся автоматически
(AUTO_INCREMENT).
7.3 Удаление строки из таблицы.
DELETE FROM readers WHERE id = 777;
Удалит из таблицы readers все строки с id равным 777.
7.4 Выборка строк из таблицы
7.4.1 Простой SELECT по одной таблице.
Стоит задача выбрать все книги автора c id равным 777:
SELECT id, title FROM books WHERE author_id = 777;
Практический MySQL. Пособие для начинающих.
12
7.4.2 Сложный SELECT по трем таблицам с вложенным SELECT.
Стоит задача выбрать все книги, которые находятся у читателя Ivan Pupkin:
SELECT
b.id,
b.title,
a.name,
a.surname
FROM books AS b
INNER JOIN credits AS c ON c.book_id = b.id
INNER JOIN authors ON b.author_id = a.id
WHERE c.reader_id IN(
SELECT r.id FROM readers AS r WHERE
r.name=”Ivan” AND r.surname=”Pupkin”);
Когда в запросе участвуют несколько таблиц, название столбца указывается после имени
таблицы через точку, например, books.id. Ключевое слово AS позволяет задать более
короткое имя для соответствующей таблицы. Оператор JOIN объединяет несколько таблиц
в одну временную таблицу. В неё включаются все строки из таблиц credits, authors,
books,
которые удовлетворяют условиям, указанным после ключевого слова ON. Сперва
объединяется credits c books, затем к ним добавляется authors.
Рассмотрим, как происходит выполнения запроса, на примере следующей БД
После первого соединения
INNER JOIN credits AS c ON c.book_id = b.id.
к таблице books добавляются столбцы из таблицы credits. Объединяются строки, у
которых значение id из таблицы books и значение book_id из таблицы credits совпадают
Практический MySQL. Пособие для начинающих.
13
(b.id = c.book_id). Обратите внимание, что книга с id = 4 не добавляется, а некоторые
книги присутствуют по несколько раз (поскольку их брали разные читатели).
После второго соединения
INNER JOIN authors ON b.author_id = a.id
к таблице, получившейся после первого JOIN, добавляются строки из таблицы authors, у
которых id совпадает с author_id.
В результате соединения трех таблиц, получается следующая сводная таблица
Вложенный SELECT определяет, что id читателя «Ivan Pupkin» равен двум.
Из объединенной таблицы books-credits-authors выбираются строки, у которых
reader_id = 2
Практический MySQL. Пособие для начинающих.
14
Выбираются столбцы, указанные после SELECT b.id, b.title, a.name, a.surname
7.4.3 Разновидности JOIN

INNER
JOIN.
В примере выше, использовался INNER JOIN. Данный оператор
объединяет строки, у которых значения в некоторых столбцах совпадают.
Остальные строки отсекаются.
SELECT FROM A INNER JOIN B ON <condition>
На диаграмме Венна это соответствует пересечению множеств. Зеленым цветом
показаны строки, которые будут выбраны в результате запроса.

LEFT JOIN.
Например,
SELECT FROM A LEFT JOIN B ON <condition>
выбираются все строки из таблицы A, к ней присоединяются строки из таблицы B,
удовлетворяющие некоторому условию (на рисунке показаны темным цветом). Для
строк, не соответствующих условию, вместо значений из таблицы B заносится
значение NULL (на рисунке им соответствует светло-зеленая область).
Практический MySQL. Пособие для начинающих.

RIGTH JOIN.
15
Аналогично
SELECT FROM A RIGHT JOIN B ON <condition>

OUTER JOIN.
Выбирается все, что не входит в INNER JOIN
SELECT FROM A INNER JOIN B ON <condition>

CROSS JOIN.
Осуществляется связь всех строк со всеми, перекрестное соединение
или декартово произведение. Обратите внимание на отсутствие условия.
SELECT FROM A CROSS JOIN B
7.5 Изменение значений в ячейках таблицы
Стоит задача изменить фамилию читателя c id = 2 (“Pupkin”) на “Surokin”.
UPDATE readers SET surname = “Surokin” WHERE id = 2
8 Дамп и Восстановление
Для создания резервной копии БД (дампа) используется специальная утилита
mysqldump.exe
(располагается в той же папке, что и mysql.exe). Перед этим необходимо
выйти из приложения mysql, выполнив команду exit.
mysqldump –u <user_name> -h <host_name> -p <database_name> > dump.sql
Произойдет копирование всего содержимого БД database_name в файл dump.sql,
находящий в той же папке, что и приложение mysqldump.exe.
Восстановление БД из файла дампа dump.sql происходит при выполнении следующей
команды
mysql –u <user_name> -p –h <host_name> <database_name> < dump.sql
Download