Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РУБД - Теория по SQL .doc
Скачиваний:
4
Добавлен:
27.08.2019
Размер:
691.71 Кб
Скачать

Методичка

для выполнения лабораторных работ

в среде СУБД MySQL

Тема: Знакомство со средой MySQL. Утилита mysqladmin. Создание базы данных.

Запуск службы MySQL

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

Запуск ПУСК – ПАНЕЛЬ УПРАВЛЕНИЯ – СЛУЖБЫ

Утилита mysqladmin

Главным инструментом администрирования баз данных в MySQL служит утилита mysqladmin. С ее помощью можно создавать, уничтожать и контролировать свой сервер и поддерживаемые им базы данных.

mysqladmin [options] command [ command. . . ]

Команды

create database Создать новую базу данных.

drop database Уничтожить базу данных.

extended-status Выдать отчет о состоянии сервера, более полный, чем это делает команда status.

flush-hosts Послать клиентам всю информацию, находящуюся в буфере.

flush-logs Записать на диск все журнальные данные из буфера.

flush-privileges То же, что и reload,

flush-status Обнулить переменные состояния.

flush-tables Выполнить все буферизованные табличные операции.

kill thread-id [thread-id...] Завершить один или несколько потоков mysqld.

password password Установить пароль администратора для сервера баз данных.

Ping Проверить, работает ли сервер MySQL.

processlist Показать активные потоки сервера mysqld.

reload Перезагрузить информацию о правах доступа из таблицы привилегий.

Refresh Выполнить все буферизованные табличные операции и открыть заново файлы журналов.

shutdown Закончить работу сервера баз данных.

status Отчет о состоянии сервера.

variables Вывести системные переменные, используемые сервером.

version Вывести номер версии сервера.

Создание баз данных mysqladmin -p create DATABASENAME создает новый каталог, который будет содержать файлы базы данных, в каталоге data.

Удаление базы данных mysqladmin -p drop DATABASENAME

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

Состояние сервера

В утилите mysqladmin очень много команд, позволяющих контролировать состояние сервера MySQL. Ввод команды mysqladmin status обеспечивает выдачу состояния сервера в одной строке, которая выглядит следующим образом:

Uptime: 395 Threads: 1 Questions: 14 Slow queries: 0

Opens: 10 Flush tables: 1 Open tables: 6

Выводимые величины означают следующее:

Uptime Число секунд, в течение которых сервер запущен и работает.

Threads Число потоков, взаимодействующих с базой в данный момент. Всегда существует хотя бы один поток - тот, который подсчитывает все остальные потоки.

Questions Число запросов, переданных базе данных с момента запуска.

Slow queries Число запросов, выполнение которых потребовало больше времени, чем время, указанное в конфигурации.

Opens Число таблиц, открытых с момента запуска сервера.

Flush tables Количество команд flush, refresh и reload.

Open tables Число таблиц, открытых в данный момент. Поскольку MySQL многопоточна, каждая таблица одновременно может быть открыта несколько раз.

Для вывода более общей статической информации используется команда mysqladmin version. Она выдает на экран следующее:

bin/mysqladmin Ver 7.8 Distrib 3.22.17, for sun-solaris2.6 on spare TCX Datakonsult AB, by Monty

Server version 3.22.17

Protocol version 10

Connection Localhost via Unix socket

Unix socket /tmp/;ny3ql. sock

Uptime: 23 mm 58 sec

Threads: 1 Questions: 15 Slow queries: 0 Opens: 10 Flush tables: 1 Open tables: 6

Последняя строка совпадает, конечно, с теми данными, которые показывает mysqladmin status. Остальные данные совершенно другие.

Server version Версия запущенного сервера MySQL.

Protocol version Версия коммуникационного протокола MySQL, который поддерживает сервер..

Connection Метод подключения к серверу. Если было обращение к удаленному серверу, в этой позиции будет имя машины, с которой идет подключение.

Unix socket Имя файла сокета, который используется для обмена данными с сервером.

Uptime Суммарное время работы сервера.

Две другие команды, mysqladmin variables и mysqladmin extended-status, предлагают дополнительную информацию.

Команда mysqladmin processlist, перечисляет все активные потоки в виде таблички:

Здесь указано, чем занят каждый процесс. Выдаваемые величины имеют следующий смысл:

Id Внутренний идентификационный номер потока. Можно использовать это число в команде mysqladmin kill, чтобы завершить поток.

User Пользователь, подключенный к серверу через этот поток.

Host Имя узла, с которого подключился пользователь.

db База данных, к которой подключен пользователь.

Command Тип команды, выполняемой потоком. Команда может иметь один из следующих типов:

Sleep Поток ждет ввода пользователя. Большинство процессов должно находиться в этом состоянии.

Quit Поток в процессе завершения.

Init DB Поток готовит выбранную базу к взаимодействию.

Query Поток выполняет реальный запрос.

Field list Поток создает список полей в таблице.

Create DB Поток создает новую базу данных.

Drop DB Поток удаляет базу данных.

Reload Поток перезагружает таблицы доступа MySQL. После перезагрузки все новые потоки будут использовать обновленные таблицы доступа.

Shutdown Поток находится в процессе завершения всех других потоков и закрытия сервера.

Statistics Поток генерирует статистику.

Processes Этот поток анализирует другие потоки. С этим значением будет показан поток, выполняющий данную команду.

Connect Поток в процессе установления входящего соединения с клиентом.

Kill Этот поток завершает другой поток.

Refresh Поток очищает все буферы и сбрасывает журнальные файлы.

Завершение работы сервера mysqladmin -p shutdown Эта команда - самый правильный способ завершения работы сервера.

mysqlshow [options] [database] [table] [field] Показывает структуру указанной базы данных, таблицы или поля. Если не заданы аргументы, выдается список всех баз данных. С одним аргументом будет выдана информация о структуре указанной базы. С двумя аргументами программа выдаст информацию об указанной таблице. Если указать все три элемента, будет показана информация об отдельном указанном поле таблицы

Параметры (для mysqladmin и mysqlshow)

-f, --force Удалить таблицы без подтверждения.

-h host, --host=host Подключиться к серверу MySQL на указанном хосте.

-i seconds, --sleep=seconds Последовательно выполнять команды, делая между каждым запуском паузу длиной в указанное количество секунд.

-р [password], --password=[password] Пароль, используемый для подключения к серверу баз данных. Если использовать без аргумента, пароль будет запрошен из командной строки.

-Р port, --port=port Порт, используемый для подключения к удаленному серверу баз данных.

-и username, --user=username Имя пользователя, используемое для подключения к серверу баз данных.

MySQL Administrator

Утилита предназначена для администрирования сервера, а также может выполнять операции резервного копирования и востановления информации (как над отдельными, так и над всеми базами, причем есть встроеный планировщик заданий). Основные функции утилиты сгруппированы в 11 пунктов графического меню в стиле MS Windows 2003.

Server Information  Первый пункт  стандартен – Server Information. Здесь можно посмотреть на какой платформе запущен сервер, хост/порт, текущий аккаунт пользователя, IP, операционную систему, процессор и размер доступной памяти. Тут же показывается текущий статус сервера – работает или остановлен.

Service Control  Позволяет запустить или перезапустить сервер, просмотреть лог загрузки. Вторая вкладка позволяет настроить основные параметры – пути к файлу конфигурации, директории с бинарными файлами и настроить сервер для поддержки специфических расширений (например, таблиц формата InnoDB с поддержкой транзакций или использования для работы именованных каналов).

 User Administration  Позволяет настроить привилегии для каждого пользователя и оперативно управлять ими. При использовании MySQL Administrator все операции над пользователями проходят в графическом режиме и в любое время за считанные секунды можно настроить привелегии для любого пользователя или базы данных.

 Server Logs  Показывает стандартные логи сервера – общий лог и записи об ошибках.

Вот самое интересное и полезное  - это реализованные функции резервирования и востановления БД. Реализован удобный планировщик, и теперь можно делать раздельное резервирование отдельных БД и таблиц – одни БД один раз в сутки, другие в конце недели и т.д. Опции резервирования также гибко настраиваются – для этого есть вкладка Advanced Options. Вся вкладка Schedule пока неактивна

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

 Replication Status Функция Replication Status скорее всего еще до конца не реализована, присутствует только вкладка Server Information. Для реализации и настройки репликации надо перейти на вкладку Replication раздела Startup variables, где можно детально настроить параметры репликации.

Catalogs  Последний раздел дает доступ к отдельным базам и таблицам, позволяет осуществлять операции оптимизации, проверки и востановления таблиц, а также показывает сведения об индексах и их параметрах, а также пользователей, которые имеют доступ к конкретной базе или таблице.

  Запуск СУБД MySQL осуществляется следующим образом:

mysql [OPTIONS] database

Клиентская часть СУБД MySQL названа mysql. Она обеспечивает интерфейс командной строки с СУБД MySQL и возможность неинтерактивной пакетной обработки.

Просмотреть список команд программы mysql можно, запустив ее с параметром --help:

mysql --help

Опции, поддерживаемые программой mysql, представлены в таблице.

Таблица 1

Опция

Описание

-\?, --help

Справка

-d, --debug=[options]

Вывести в протокол отладочную информацию.

-d, --debug-info

Вывести отладочную информацию при выходе из программы

-e, --exec

Выполнить команду и выйти, неявная форма опции --batch

-f, --force

Продолжить, даже если мы сталкиваемся с SQL ошибкой

-h, --hostname=[hostname]

Задает имя сервера, с которым вы желаете соединиться

-P, --port=[port]

Порт для соединения с сервером MySQL

-p, --password=[password]

Пароль пользователя для соединения с сервером MySQL.

-q, --quick

Быстрый вывод.

-s, --silent

Работать молча (подавить вывод)

-u, --user=[user]

Имя пользователя для соединения с сервером MySQL.

-v, --verbose

Подробный вывод. -v

-w, --wait

Если подключение терпит неудачу, то подождать и повторить попытку

-B, --batch

Выполнить в пакетном режиме. Результаты будут выведены в формате с разделением табуляцией.

-V, --version

Вывести информацию о версии пакета

В интерактивном режиме mysql будет печатать результаты в таблице. Если не задан пароль или имя пользователя mysql попробует зайти в систему на сервере базы данных с использованием вашего логина и НУЛЕВОГО (ПУСТОГО) пароля. Например:

mysql -u coobic

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

Your MySQL connection id is 4 to server version: 4.0.12-max

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

Тема: Создание, модификация и удаление таблиц баз данных.

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

Эти ограничения относятся как к интерактивному режиму работы mysql (из командной строки), так и к вызову команд из файла, читаемого с ввода командой mysql < some-file.

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

Создание таблиц

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(col_name type [NOT NULL | NULL] [AUTO_INCREMENT] [DEFAULT default_value] [PRIMARY KEY]

или PRIMARY KEY (col_name [(length)],...)

или KEY [index_name] (col_name [(length)],...)

или INDEX [index_name] (col_name [(length)],...)

или UNIQUE [INDEX] [index_name] (col_name [(length)],...)

или FULLTEXT [INDEX] [index_name] (col_name [(length)],...)

или CHECK (expr),...)]

или FOREIGN KEY [REFERENCES tbl_name [(index_col_name,...)]

[MATCH FULL | MATCH PARTIAL]

[ON DELETE reference_option]

[ON UPDATE reference_option]

TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }]

[ SELECT ... ] (любое корректное выражение SELECT)

или

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name LIKE old_table_name;

Оператор CREATE TABLE создает таблицу с заданным именем в текущей базе данных. Если нет активной текущей базы данных или указанная таблица уже существует, то возникает ошибка выполнения команды.

Каждая таблица tbl_name представлена определенными файлами в директории базы данных. В случае таблиц типа MyISAM это следующие файлы:

Файл

Назначение

tbl_name.frm

Файл определения таблицы

tbl_name.MYD

Файл данных

tbl_name.MYI

Файл индексов

Для хорошей переносимости SQL нужно избегать имен, начинающихся не с допустимой буквы. Длина идентификатора может быть до 64 символов.

Предложение состоит из имени таблицы, за которым идет любое количество определений полей. Синтаксис определения полей включает в себя имя поля, за ним его тип, за ним любой модификатор (например: name char(30) not null ).

TEMPORARY-- временная таблица автоматически удаляется по завершении соединения, а ее имя действительно только в течение данного соединения.

IF NOT EXISTS для проверки существования данной таблицы.

AUTO_INCREMENT Атрибут позволяет автоматически обновлять числовое поле. Это удобно для создания уникальных идентификаторов для записей в таблице. При вводе значения NULL или 0 существующее значение автоматически увеличивается на единицу. Текущее значение поля AUTO_INCREMENT может быть получено с помощью функции LAST_INSERT_ID().

DEFAULT value Атрибут приписывает полю значение по умолчанию. Это значение будет присвоено полю в случае, если во вводимой в таблицу записи это поле пустое. Если значение по умолчанию не определено и нет ограничения NOT NULL , то будет записано значение NULL. В случае NOT NULL MySQL запишет значение на основе типа поля.

NOT NULL Этот атрибут гарантирует, что каждая запись в столбце будет иметь какое-либо, отличное от NULL, значение. Попытка вставить в такое поле значение NULL вызовет ошибку.

NULL Атрибут указывает на допустимость значения NULL. Это атрибут по умолчанию в случае, если никакой атрибут не указан. Поля, входящие в состав индекса, не могут иметь атрибут NULL. (Он будет проигнорирован, даже если он указан.)

PRIMARY KEY Атрибут автоматически делает поле первичным ключом таблицы. Таблица может иметь только один первичный ключ. Любое поле, являющееся первичным ключом, должно иметь атрибут NOT NULL.

FULLTEXT создание индекса, для полнотекстового поиска.

FOREIGN KEY таблицы InnoDB выполняют проверку ограничений внешнего ключа. Столбцы таблицы, на которую ссылаются, должны быть явно указаны. InnoDB поддерживает действия ON DELETE и ON UPDATE.

CHECK фактически ничего не делают. Они введены только из соображений совместимости, чтобы облегчить перенос кода с других SQL-серверов.

Если после команды CREATE указывается команда SELECT, то создаются новые поля для всех элементов в данной команде SELECT. Например:

CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;

CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (a), KEY(b))

TYPE=MyISAM SELECT b,c FROM test2;

Эта команда создаст таблицу MyISAM с тремя столбцами a, b и c. Столбцы из команды SELECT присоединяются к таблице справа, а не перекрывают ее. Пример:

SELECT * FROM foo;

n

1

CREATE TABLE bar (m INT) SELECT n FROM foo;

SELECT * FROM bar;

m n

NULL 1

Каждая строка в таблице foo вносится в таблицу bar со своим значением из foo, при этом в новые столбцы в таблице bar записываются величины, заданные по умолчанию. Команда CREATE TABLE ... SELECT не создает автоматически каких-либо индексов. Чтобы иметь индексы в созданной таблице, необходимо указать их перед данной командой SELECT:

CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;

LIKE создает таблицу, основываясь на определении другой, уже существующей, таблицы.

Типы таблиц MySQL

MySQL поддерживает два различных типа таблиц: транзакционные (InnoDB и BDB) и без поддержки транзакций (HEAP, ISAM, MERGE и MyISAM).

Преимущества транзакционных таблиц (Transaction-safe tables, TST):

  • Надежность.

  • Лучше обеспечивает параллелизм при одновременных обновлениях таблицы и чтении.

Преимущества нетранзакционных таблиц (non-transaction-safe tables, NTST):

  • Работать с ними намного быстрее, так как не выполняются дополнительные транзакции.

  • Для них требуется меньше дискового пространства

  • Для обновлений используется меньше памяти.

Таблицы MyISAM приняты по умолчанию в MySQL. Он основывается на коде ISAM (устаревший тип таблиц) и обладает в сравнении с ним большим количеством полезных дополнений.

Таблицы MERGE (или таблица MRG_MyISAM) представляет собой совокупность идентичных таблиц MyISAM, которые могут использоваться как одна таблица.

Таблицы HEAP Для HEAP-таблиц используются хэш-индексы; эти таблицы хранятся в памяти. Благодаря этому обработка их осуществляется очень быстро, очень хорошо подходит для временных таблиц!

Таблицы InnoDB и BDB или BerkeleyDB снабжены обработчиком таблиц, обеспечивающим безопасные транзакции (уровня ACID) с возможностями фиксации транзакции, отката и восстановления после сбоя. Чтобы использовать InnoDB, необходимо указать параметры запуска InnoDB в своем файле my.cnf или my.ini. Самый простой способ внести изменения - добавить в раздел [mysqld] строку innodb _data_file_path=ibdata:30M

Типы данных столбцов

MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных

Поля должны иметь один из следующих типов данных:

DECIMAL (length,dec)

Десятичное число с плавающей запятой.

DOUBLE [(length,dec)]

Число (4 или 8 байт) двойной точности с максимальной длиной и фиксированном числом десятичных чисел.

FLOAT [(length,decimals)]

Число одиночной точности с максимальной длиной и фиксированном числом десятичных чисел (4 байта).

INT [(length)] [UNSIGNED] [ZEROFILL]

Целое (4 байта).

TINYINT[(length)] [UNSIGNED][ZEROFILL]

Целое число (1 байт).

REAL [(length,dec)]

Идентично DOUBLE (8 байт).

BLOB

Двоичный объект (максимальная длина 65535 байт)

VARCHAR(NUM)

Строка переменной длины (1 <= NUM <= 255)

CHAR(NUM)

Строка фиксированной длины (1 <= NUM <= 255)

DATE

Использует формат "YYYY-MM-DD".

Диапазон от 0000-00-00 до 9999-12-31..

DATETIME

Диапазон '0000-01-01 00:00:00' - '9999-12-31 23:59:59'

TIME

формат "HH:MM:SS" HH:MM:DD HHMMDD HHMM HH

TIMESTAMP(NUM)

Автоматически изменяется при вставке/обновлении. Имеет формат YYMMDDHHMMSS или YYYYMMDDHHMMSS.

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

BIT , BOOL Являются синонимами для TINYINT(1).

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] Малое число с плавающей точкой обычной точности. Допустимые значения: от -3,402823466E+38 до -1,175494351E-38, 0, и от 1,175494351E-38 до 3,402823466E+38. Если указан атрибут UNSIGNED, отрицательные значения недопустимы.

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL] , REAL[(M,D)] [UNSIGNED] [ZEROFILL] Число с плавающей точкой удвоенной точности нормального размера. Допустимые значения: от -1,7976931348623157E+308 до -2,2250738585072014E-308, 0, и от 2,2250738585072014E-308 до 1,7976931348623157E+308. Если указан атрибут UNSIGNED, отрицательные значения недопустимы.

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL] `Неупакованное'' число с плавающей точкой. Ведет себя подобно столбцу CHAR, содержащему цифровое значение. Термин ``неупакованное'' означает, что число хранится в виде строки и при этом для каждого десятичного знака используется один символ.

Для всех целочисленных полей в MySQL можно установить атрибут AUTO_INCREMENT. При записи величины NULL (рекомендуется) или 0 в столбец AUTO_INCREMENT данный столбец устанавливается в значение value+1, где value представляет собой наибольшее для этого столбца значение в таблице на момент записи. Последовательность AUTO_INCREMENT начинается с 1. В таблице может быть только один столбец AUTO_INCREMENT, и он должен быть индексирован. Последнюю внесенную строку можно найти с помощью следующего запроса

SELECT * FROM tbl_name WHERE auto_col IS NULL