- •Письменные лекции по дисциплине «Базы данных»
- •Лекция 1. Понятие субд. Модели данных. Реляционная модель
- •1.1. Бд и субд
- •1.2. Классификация бд
- •1.3. Классификация субд
- •1.3.1. Состав субд и работа бд
- •1.4. Язык sql
- •1.5. Основные типы sql запросов по их видам
- •1.6. Основные функции субд
- •1.7. Модели данных
- •1.8. Реляционная модель данных
- •1.9. Информационный объект
- •1.10. Нормализация отношений
- •1.10.1. Первая нормальная форма
- •1.10.2. Вторая нормальная форма
- •Лекция 2. Продолжение прошлой лекции
- •2.1. Третья нормальная форма
- •2.2. Отношения
- •2.3. Ключ
- •2.4. Пример выгрузки данных
- •2.5. Заполнение таблиц
- •2.6. Реляционные операции
- •1. Выборка
- •2. Проекция
- •3. Объединение
- •4. Пересечение
- •5. Разность
- •6. Произведение
- •7. Деление
- •8. Соединение
- •2.7. Соединение таблиц
- •2.8. Изменение таблицы
- •2.9. Типы данных MySql
- •2.10. Параллелизм
- •Лекция 3. Хранимые процедуры и функции
- •3.1. Хранимая процедура MySql
- •3.2. Переменные
- •3.3. Параметры процедуры
- •3.4. Операторы if и case
- •3.5. Оператор return
- •Лекция 4. Транзакции. Уровни изоляции. Блокировки.
- •4.1. Понятие транзакции
- •4.2. Операторы транзакции
- •4.3. Уровни изоляции (изолированности) транзакций
- •4.4. Тест acid
- •4.5. Механизм блокировок
- •4.6. Взаимоблокировки
- •4.7. Ведение журнала транзакций
- •Лекция 5. Ссылочная целостность данных. Внешние ключи. Индексирование.
- •5.1. Ссылочная целостность данных
- •5.2. Внешний ключ
- •5.2.1. Условия обеспечения целостности данных при помощи внешнего ключа
- •5.2.2. Практический пример
- •5.2.3. Синтаксис объявления внешнего ключа
- •5.3. Индекс
- •5.3.1. Для каких полей нужно создавать индексы
- •5.3.2. Принцип работы индексов
- •5.3.3. Виды индексов
- •5.3.4. Индексирование таблиц MySql
- •5.3.5. Создание индекса в MySql
- •5.3.6. Типы индексов в MySql
- •5.3.7. Удаление индекса в MySql
- •5.3.8. Преимущества использования индексов
- •5.3.9. Недостатки использования индексов
- •5.3.10. Практический пример
- •5.4. Курсор
- •Лекция 6. Администрирование баз данных
- •6.1. Резервирование и восстановление вручную
- •6.2. Команды grant и revoke
- •6.3. Утилита mysqldump
- •6.3.1. Создание дампа
- •6.3.2. Развертывание дампа
- •6.4. Утилита mysqlhotcopy
- •6.5. Утилита mysqlcheck
- •Лекция 7. Администрирование бд
- •7.7. Статус таблиц
- •7.8. Просмотр таблиц, доступных в бд
- •7.9. Получение информации о статусе сервера
- •7.10. Получение информации о переменных
- •7.16. Файлы журналов
- •7.17. Как обезопасить MySql от хакеров
- •Указатели на страницы с ответами
7.7. Статус таблиц
CHECK TABLE tbl_name [, tbl_name .] [option [option]]
option = QUICK | FAST | EXTEND | CHANGED
ANALYZE TABLE tbl_name [, tbl_name.]
Проверка данных таблиц на наличие ошибок для таблиц MyISAM и BDB выполняется функцией CHECK TABLE. Если найдена ошибка в таблице данных или индексов, таблица помечается как дефектная и не может быть использована до тех пор, пока не будет восстановлена.
Анализ ключей можно провести с помощью утилиты myisamchc -a, проверку данных таблиц — с помощью myisamchc -m.
Функция ANALYZE TABLE проверяет состояние индексов в таблицах для MyISAM и BDB. На время проверки таблица обычно блокируется «на чтение».
7.8. Просмотр таблиц, доступных в бд
SHOW TABLES — выводит список существующих таблиц.
7.9. Получение информации о статусе сервера
SHOW STATUS — выводит список runtime-переменных, по которым можно судить о состоянии сервера MySQL.
7.10. Получение информации о переменных
В SQL Server имеется более 30 глобальных переменных, не имеющих параметров, которые определяются и поддерживаются системой. Все глобальные переменные имеют префикс в виде двух символов @@. Вы можете извлечь значение любой из них с помощью простого запроса SELECT, как в следующем примере:
SELECT @@СONNECTIONS
Здесь используется глобальная переменная @@CONNECTIONS для извлечения количества подключений к SQL Server со времени запуска программы.
@@ERROR — содержит номер ошибки, возникшей при выполнении последнего оператора T-SQL в текущем соединении. Если ошибка не обнаружена, содержит 0. Значение этой системной переменной переустанавливается после выполнения каждого очередного оператора. Если требуется сохранить содержащееся в ней значение, то это значение следует переносить в локальную переменную сразу же после выполнения оператора, для которого должен быть сохранен код ошибки.
@@IDENTITY — содержит последнее идентификационное значение, вставленное в базу данных в результате выполнения последнего оператора INSERT. Если в последнем операторе INSERT не произошла выработка идентификационного значения, системная переменная @@IDENTITY содержит NULL. Это утверждение остается справедливым, даже если отсутствие идентификационного значения было вызвано аварийным завершением при выполнении оператора. А если с помощью одного оператора осуществляется несколько операций вставки, этой системной переменной присваивается только последнее идентификационное значение.
@@ROWCOUNT — одна из наиболее широко используемых системных переменных. Возвращает информацию о количестве строк, затронутых последним оператором. Обычно применяется для контроля ошибок, отличных от тех, которые относятся к категории ошибок этапа прогона программы. Например, если в программе обнаруживается, что после вызова на выполнение оператора DELETE с конструкцией WHERE количество затронутых строк равно нулю, то можно сделать вывод, что произошло нечто непредвиденное. После этого сообщение об ошибке может быть активизировано вручную.
Следует отметить, что с версии SQL Server 2000 глобальные переменные принято называть функциями. Название глобальные сбивало пользователей с толку, позволяя думать, что область действия таких переменных шире, чем у локальных. Глобальным переменным часто ошибочно приписывалась возможность хранить информацию, независимо от того, включена она в пакет либо нет, что, естественно, не соответствовало действительности.
7.11. Получение информации о процессах
SHOW PROCESSLIST выводит информацию о выполняющихся потоках. Для того, чтобы видеть все потоки, пользователю нужно иметь привилегии PROCESSLIST, иначе он сможет увидеть только свои собственные потоки. Без указания опции FULL выводятся только первые 100 или меньше символов запроса потока. Прервать выполнение потока можно с помощью функции KILL.
7.12. Получение информации о привилегиях
Важно не только давать и отбирать привилегии, но и иметь информацию о том, какими правами доступа обладает каждый из субъектов.
PRIVILEGES записывает и заново открывает информацию о привилегиях пользователей. Это делается для вступления в силу изменений, сделанных в политике привилегий.
7.13. Структура SQL
7.14. Завершение потока
Команда KILL thread_id
Каждое подключение к MySQL выполняется в отдельном потоке. При необходимости можно определить поток командой SHOW PROCESSLIST и отключить соединение с ним.
Для того, чтобы видеть все потоки, необходимо иметь привилегии Process_priv, иначе видны только потоки текущего пользователя.
7.15. Очистка КЭША MySQL
Синтаксис:
FLUSH [HOSTS]
[.LOGS]
[.PRIVILEGES]
[.[TABLE | TABLES] table_name [, table_name.]]
[. TABLES WITH READ LOCK]
[.STATUS]
Очистка КЭШа MySQL сбрасывает всю информацию, находящуюся в КЭШе данных MySQL, на диск. Для выполнения этой операции необходимы привилегии Reload_priv.
Ключевое слово HOST указывает MySQL очистить информацию о клиентских площадках. Применяется при смене клиентского IP-адреса или появлении ошибок связи с сервером.
LOGS закрывает и повторно открывает все журналы. Если определен журнал изменений или binary-журнал без расширения, то номер в расширении имени журнала будет увеличен на 1 относительно предыдущего файла.
PRIVILEGES записывает и заново открывает информацию о привилегиях пользователей. Это делается для вступления в силу изменений, сделанных в политике привилегий.
Использование TABLES без перечисления имен таблиц закрывает и открывает все открытые таблицы. При этом записываются все изменения, внесенные в таблицы. При перечислении имен таблиц будет перезагружена информация только из указанных таблиц.
FLUSH TABLES WITH READ LOCK закрывает все открытые таблицы и блокирует их чтение до тех пор, пока не будет выполнена команда UNLOCK TABLES. Блокирование базы данных подобным образом позволяет выполнять резервное копирование базы данных.
STATUS обнуляет runtime-переменные сервера.