Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

00-tech-book

.pdf
Скачиваний:
74
Добавлен:
10.02.2016
Размер:
7.86 Mб
Скачать

MySQL

MySQL – самая известная и популярная СУБД (Система управления базами данных). Высокая популярность тесно взаимосвязана с бесплатностью продукта. Но по возможностям она не уступает платным аналогам, таким как Oracle или IBM DB2. Я даже знаю многие компании где помимо Oracle для менее официальных задач используют MySQL и она отлично справляется!

На позиции системного администратора/инженера знать MySQL никто не заставляет. Для этого есть целых две должности — разработчик БД и администратор БД. Чем занимается и первый, и второй я думаю понятно из названия. Но если все же освоить эту тему то это будет только ощутимым плюсом в вашем резюме. Меня очень часто спрашивали на собеседованиях, знаю ли я MySQL. Причем обычно требовалось знание только основ и опыт написания простых запросов. В большинстве случаев этого достаточно. Помните закон Парето ? Вот-вот, 20% знаний о MySQL покроют 80% ваших потребностей в этой технологии. Так давайте получим их.

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

Раньше все данные хранились в обычных текстовых файлах. Но со временем, объем информации с которым стали работать становился все больше и больше. Появилась необходимость в получение к ней быстрого и удобного доступа. Появилась необходимость структурировать большой объем данных и производить там поиск.

MySQL — это клиент-серверное приложение. То есть где-то запущена программа-сервер а вы как клиент подключаетесь к ней, делаете специально

сформированный запрос и получаете результат в виде набора данных.

Данные в базе хранятся в двухмерном массиве, примерно вот так, как в примере ниже.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Имя

 

 

 

 

 

 

Фамилия

 

 

 

 

 

Телефон

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Александр

 

 

Иванов

 

 

 

 

 

 

 

 

111-22-33

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Федор

 

 

 

 

 

 

Емельянин

 

 

 

 

 

 

 

 

222-33-11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сергей

 

 

 

 

 

 

 

 

Петров

 

 

 

 

 

 

 

 

 

 

 

 

333-22-11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И подобных данных может быть очень много. Запросы к базе осуществляются с помощью SQL-запросов.

Модуль 11. MySQL.

 

121

 

 

SQL(Structured Query Language) — язык структурированных запросов, не путать с СУБД.

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

Для однозначного определения строки в таблице используется так называемый первичный ключ. Обычно это номер, который уникален для каждой записи. Обозначается он как PRIMARY KEY.

Команды принято набирать заглавными буквами.

Пример роли MySQL в информационном пространстве

СИС – это справочно-информационная система, по сути это обычно вебсайт, данные которого хранятся в базе MySQL.

Типы данных

Все данные хранятся в определенном формате, который принято называть типом данных. Типы данных бывают разные, числовые – хранят числа, строковые – хранят наборы символов (слова, целые предложения) и

 

122

 

Модуль 11. MySQL.

 

 

 

 

бинарные – хранят бинарные данные, такие как графические картинки. Тип данных нужно выбирать исходя из своих потребностей.

Числа

TINYINT – очень маленькое целое число, может быть от -128 до 127 или от 0 до 255

SMALLINT – малое целое число, может быть от -32768 до 32767 или от 0 до 65535

MEDIUMINT – целое число среднего размера, может быть от -8388608 до 8388607 или от 0 до 16777215

INT – целое число нормального размера, может быть от -2147483648 до 2147483647 или от 0 до 4294967295

BIGINT – большое целое число, может быть от -9223372036854775808 до 9223372036854775807 или от 0 до 18446744073709551615

FLOAT – малое число с плавающей точкой обычной точности. Может быть от -3.402823466E+38 до -1.175494351E-38, 0, и от 1.175494351E-38 до 3.402823466E+38.

DOUBLE - число с плавающей точкой удвоенной точности нормального размера.Можетбытьот-1,7976931348623157E+308до-2,2250738585072014E- 308, 0, и от 2,2250738585072014E-308 до 1,7976931348623157E+308

Символы

CHAR – до 255 символов, пустота заполняется пробелами

VARCHAR – строка переменной длины, для хранения величин типа VARCHAR используется только то количество символов, которое нужно + 1 байт для хранения информации о длине

Бинарные данные

BLOB – этот тип данных содержит бинарные данные, например графические картинки. Максимальная размер BLOB – 65535 байт.

MEDIUMBLOB – тоже самое что и BLOB, только максимальный размер - 16,777,215 байт (16 МБ)

LONGBLOB – бинарный тип, размер до 4 Гб.

Тип данных для хранения даты и времени

DATE – поддерживает диапазон от '1000-01-01' до '9999-12-31'

Модуль 11. MySQL.

 

123

 

 

 

DATETIME – содержит комбинацию даты и времени. Может быть от '1000-01- 01 00:00:00' до '9999-12-31 23:59:59'

TIMESTAMP – содержит время в секундах начиная с 1970-01-01. Может быть от '1970-01-01 00:00:01' UTC до '2038-01-09 03:14:07' UTC

TIME – Время. Диапазон от '-838:59:59' до '838:59:59'

YEAR[(2|4)] – год в двухзначном или четырехзначном формате. В четырехзначном может быть от 1901 до 2155, и 0000. В двухзначном может быть от 70 до 69, воспроизводя даты от 1970 до 2069.

Сколько нужно места под хранение типа данных ?

Числа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип данных

 

 

Сколько нужно места для хранения

 

 

TINYINT

 

 

 

 

 

 

 

 

1

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SMALLINT

 

 

 

 

2

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MEDIUMINT

 

 

 

3

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INT, INTEGER

 

 

4

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BIGINT

 

 

 

8

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

байта если 0 <= p <= 24, 8 байт если 25

 

 

 

FLOAT(p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<= p <= 53

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FLOAT

 

 

 

4

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DOUBLE [PRECISION], REAL

 

8

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Даты и время

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип данных

 

Сколько нужно места

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DATE

 

 

 

3

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TIME

 

 

 

 

3

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DATETIME

 

 

8

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TIMESTAMP

 

4

байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

YEAR

 

1

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строки и бинарный тип

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип данных

 

 

Сколько нужно места

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CHAR

 

 

M × w байт, 0 <= M <= 255, где w – нужное число байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для объекта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VARCHAR

 

L + 1 байт если значение требует до 255 байт, L + 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

байт если требуется больше чем 255 байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

124

 

Модуль 11. MySQL.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BLOB

 

 

 

 

L + 2 байт, где L < 216

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MEDIUMBLOB

 

L + 3 байт, где L < 224

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LONGBLOB

 

L + 4 байт, где L < 232

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

M – декларированная длина ячейки, L – актуальная длина ячейки

Лучший источник о типах данных в MySQL 5.0 – это конечно же официальная документация: http://dev.mysql.com/doc/refman/5.0/en/data-types.html

Практика

Начнем осваивать MySQL но для начала поставим нужное ПО.

#yum -y install mysql-server

Теперь проверим статус базы

#/etc/init.d/mysqld status mysqld is stopped

База в выключенном состояние. Давайте ее запустим в первый раз.

#chkconfig mysqld on

#/etc/init.d/mysqld start

Initializing MySQL database: Installing MySQL system tables...

OK

Filling help tables...

OK

To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'

/usr/bin/mysqladmin -u root -h centos52 password 'new-password'

See the manual for more instructions.

Модуль 11. MySQL.

 

125

 

 

 

You can start the MySQL daemon with:

cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at

http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

[ OK ]

Starting MySQL:

[ OK ]

Запуская впервые БД мы увидели предупреждение о необходимости установить административный пароль. Попробуем получить доступ в интерфейс mysql без пароля.

# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Мы без проблем попали внутрь и можем делать что хотим! Думаю вам не захочется чтобы кто-то еще получил доступ к Вашим данным. Поэтому мы сейчас поставим административный пароль.

# /usr/bin/mysqladmin -u root password ‘the_secret’

Готово. Проверяем что изменилось.

# mysql

 

126

 

Модуль 11. MySQL.

 

 

 

 

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Ошибка доступа! Это хорошо, это означает что уже не любой сможет попасть в базу. Теперь зададим команду mysql с ключом -p, То есть запросим строку ввода пароля, ключ -u позволяет задать пользователя под которым мы хотим

зайти. Но если ключ не задан будет использован root, То есть администратор сервера.

# mysql -p

<вводим наш пароль на MySQL, который мы ввели выше>

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 11

Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Выполним команду status, ее можно ввести сокращенно, То есть так: \s

Она нам покажет различную информацию о MySQL.

mysql> \s

--------------

mysql Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0

 

Connection id:

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Current database:

 

 

 

 

 

 

 

 

 

 

 

 

 

Current user:

root@localhost

 

 

 

 

 

 

 

 

 

 

 

SSL:

Not in use

 

 

 

 

 

 

 

 

 

 

Current pager:

stdout

 

 

 

 

 

 

 

 

 

 

 

 

Using outfile:

''

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Using delimiter:

;

 

 

 

 

 

 

 

 

 

 

 

 

Server version:

5.0.45 Source distribution

 

 

 

 

 

 

 

 

Protocol version:

10

 

 

 

 

Модуль 11. MySQL.

 

127

 

 

 

 

Connection:

 

Localhost via UNIX socket

 

 

 

 

 

 

 

 

 

 

 

Server characterset: latin1

 

 

 

 

 

 

 

 

 

 

Db characterset: latin1

 

 

 

 

 

 

 

 

Client characterset:

latin1

 

 

 

 

 

 

 

 

Conn. characterset:

latin1

 

 

 

 

 

 

 

UNIX socket:

/var/lib/mysql/mysql.sock

 

 

 

 

 

 

Uptime:

19 min 51 sec

Threads: 1 Questions: 26 Slow queries: 0 Opens: 12 Flush tables: 1 Open tab les: 6 Queries per second avg: 0.022

mysql>

Выход из монитора MySQL выполняется командой quite или просто \q

Справка по командам — команда help или просто \h

Посмотрим какие базы данных у нас есть

mysql> show databases;

+-------------------------

+

 

 

| Database

|

-------------------------+

+

| information_schema |

| mysql

|

 

 

 

 

 

| test

|

 

-------------------------+

+

3 rows in set (0.00 sec)

Эти три базы стандартные, они всегда есть в новой инсталляции MySQL. Базу test можно удалить, это делается командой DROP DATABASE

mysql> DROP DATABASE test;

Query OK, 0 rows affected (0.00 sec)

 

128

 

Модуль 11. MySQL.

 

 

 

 

Отлично мы поставили MySQL, задали на нее административный пароль, научились заходить и поняли как выполнять там команды. Продолжим.

Лучше всего обучение происходит на практике. Давайте поставим задачу. Создадим базу данных, создадим в ней две таблицы, занесем в них данные, создадим пользователя и сделаем его владельцем этой базы. Ну и в конце сделаем несколько SQL-запросов.

Создаем базу данных company, это делается командой CREATE DATABASE

mysql> CREATE DATABASE company;

Query OK, 1 row affected (0.00 sec)

Воспользовавшись командой \s мы заметим что поле Current database: является пустым. В этом поле отображается текущая база данных. Выбрав какую-то базу мы можем производить в ней манипуляции, например просматривать структуру таблиц и делать запросы.

Выберем нашу базу данных в качестве текущей, это делается командой USE

mysql> USE company;

Database changed

Просмотрим содержимое базы а именно ее таблицы

mysql> show tables;

Empty set (0.00 sec)

Пока пусто, исправим это. Создадим таблицу с сотрудниками нашей компании

mysql> CREATE TABLE users ( id INT(5) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(64), surname VARCHAR(64), age TINYINT(3), email VARCHAR(64), status VARCHAR(128)) DEFAULT CHARACTER SET UTF8;

Query OK, 0 rows affected (0.01 sec)

Отлично. Проверим, действительно ли таблица была создана.

Модуль 11. MySQL.

 

129

 

 

 

Проверим, правильно ли описана наша таблица. Структуру таблицы можно посмотреть командой DESCRIBE

Таблица готова, теперь ее нужно заполнить.

mysql> INSERT INTO users VALUES('', 'Ivan', 'Petrov', '25', 'petrov@company.ru', 'work');

Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO users VALUES('', 'Sergey', 'Malevin', '29', 'serg@company.ru', 'tourism');

Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO users VALUES('', 'Fyodor', 'Karpin', '27', 'fyodor@company.ru', 'work');

Query OK, 1 row affected, 1 warning (0.01 sec)

Файл как источник запросов

Внимание! Вы можете все свои запросы к базе поместить в файл а потом выполнить его в помощью команды SOURCE. Создадим файл sourcefile.sql и поместим туда все наши запросы INSERT. Сам файл расположен в /root.

mysql>USE company;

 

130

 

Модуль 11. MySQL.