Загрузил sasha1982161082

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

реклама
Игонин С.В.
Практический 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
Скачать