
- •Письменные лекции по дисциплине «Базы данных»
- •Лекция 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 от хакеров
- •Указатели на страницы с ответами
2.8. Изменение таблицы
Переименование таблицы:
ALTER TABLE "Все заказы(кп)"
RENAME TO "Все заказы(кп1)"
Аналогичный результат может быть получен следующим образом:
RENAME "Все заказы(кп)" TO "Все заказы(кп1)"
Добавление нового поля:
ALTER TABLE "Клиент(кп)"
ADD ( "Образование" CHAR(20) )
Удаление поля:
ALTER TABLE "Клиент(кп)"
DROP ("Образование")
Переименование поля:
ALTER TABLE "Клиент(кп)"
RENAME column "Образование" TO "Степень"
2.9. Типы данных MySql
Числовые данные — это все целые числа (без дробной части) и вещественные числа (с дробной частью).
Строковые данные — последовательность символов, заключенная в кавычки. В MySQL в качестве стандарта используются одинарные кавычки и для совместимости с другими базами данных рекомендуется именно их использование.
Календарные данные — тип для обозначение даты и времени, принимает различные формы, например строковую «2007-11-23» или числовую 20071123. Особенностью этого типа данных является их хранение в едином внутреннем формате, что позволяет производить операции сложения и вычитания, в независимости от внешнего представления.
NULL — специальный тип данных, означает отсутствие информации.
Числовые данные делятся на точечные (это BOOLEAN, INTEGER, DECIMAL) и приближенные (FLOAT, REAL, DOUBLE PRECISION).
Одни из основных строковых типов данных: CHAR(N) (строгий реальный размер: не больше, не меньше заданного N), VARCHAR(N) (нестрогий реальный размер: не больше заданного N) и TEXT (нестрогий реальный размер вплоть до 2^16-1 символов).
Одни из основных календарных типов данных: DATE (от '1000-01-01' до '9999-12-31'), TIME (от '-828:59:59' до '828:59:59') и DATETIME (от '1000-01-01 00:00:00' до '9999-12-31 00:00:00').
Подробнее: https://kbss.ru/blog/bd_mysql/153.html
2.10. Параллелизм
Параллелизм — возможность параллельной обработки в СУБД многих параллельных транзакций к одним и тем же данным в одно и то же время.
СУБД должно осуществлять правильное восстановление данных при отмене транзакций или в случае системного сбоя и гарантировать, что пользователи при параллельной работе с данными мешать друг другу не будут.
Лекция 3. Хранимые процедуры и функции
Хранимая процедура MySQL;
Переменные;
Параметры процедуры;
Операторы IF и CASE;
Оператор RETURN.
3.1. Хранимая процедура MySql
Хранимая процедура MySQL представляет собой подпрограмму, которая хранится в базе данных. Она содержит имя, список параметров и операторы SQL. Все популярные системы управления базами данных поддерживают хранимые процедуры. Они были введены в MySQL 5.
Существует два типа процедур (подпрограмм): хранимые процедуры (не возвращающие значения) и функции, возвращающие значения, которые используются в операторах SQL (например, pi()).
Основное отличие заключается в том, что функции могут использоваться как любое выражение в операторах SQL (простой вызов: pi()), а хранимые процедуры должны вызываться с помощью оператора CALL (CALL proc).
По умолчанию процедура связана с базой данных, используемой в данный момент. Чтобы связать процедуру с конкретной базой данных, нужно указать её при создании хранимой процедуры:
имя_базы_данных.имя_хранимой_процедуры
Полный синтаксис
CREATE [DEFINER = { user | CURRENT_USER }]
PROCEDURE имя_процедуры ([параметры_процедуры[,...]])
[характеристики ...] тело_подпрограммы
параметры_процедуры: [ IN | OUT | INOUT ] имя_параметра type
type: Любой валидный тип данных MySQL
характеристики: COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
тело_подпрограммы: Валидный оператор программы SQL
Можно ещё внутрь хранимой функции и хранимой процедуры добавлять ключевые слова BEGIN и END для того, чтобы выделить тело подпрограммы.
IN — параметр на вход (чтение), OUT — параметр на выход (запись), INOUT — параметр, который будет меняться в течение выполнения процедуры (и чтение, и запись).
Достоинства хранимой процедуры:
— упрощает управление кодом;
— позволяет ограничить доступ к данным в таблицах и уменьшить вероятность нежелательных действий в отношении этих данных;
— обычно выполняются быстрее, чем обычные SQL-инструкции, так как код процедур компилируется один раз при первом ее запуске, а затем сохраняется в скомпилированной форме.
Перед тем, как осуществить вызов хранимой процедуры, необходимо получить определенную информацию.
Проверка версии MySQL
mysql>SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.6.12 |
+-----------+
1 row in set (0.00 sec)
Разделитель — символ или строка символов, которая используется для закрытия оператора SQL. По умолчанию в качестве разделителя используется точка с запятой (;). Но это вызывает проблемы в хранимых процедурах и триггерах MySQL, поскольку она может иметь много операторов, и каждый должен заканчиваться точкой с запятой. Поэтому в качестве разделителя будем использовать двойной знак доллара — $$. Чтобы позже снова использовать в качестве разделителя ; выполните команду DELIMITER ; $$. Ниже приведен код для смены разделителя:
mysql> DELIMITER $$ ;
Теперь DELIMITER по умолчанию — $$.
mysql> DELIMITER ; $$
Теперь DELIMITER по умолчанию — ;.
Пример процедуры MySQL:
mysql> DELIMITER $$;
mysql> CREATE PROCEDURE job_data()
-> SELECT * FROM JOBS; $$
Query OK, 0 rows affected (0.00 sec)
Пояснение:
Команда CREATE PROCEDURE создает хранимую процедуру;
Следующая часть — это имя процедуры job_data;
Имена процедур не чувствительны к регистру, поэтому job_data равносильно JOB_DATA;
Нельзя использовать две процедуры с одним именем в одной и той же базе данных.
Можно использовать имена в формате имя_процедуры.имя_базы_данных, например, hr.job_data.
Имена процедур могут быть разделены. Если имя разделено, оно может содержать пробелы.
Максимальная длина имени процедуры составляет 64 символа.
Избегайте использования имен встроенных функций MySQL.
Последняя часть CREATE PROCEDURE — это пара скобок содержит список параметров. Поскольку эта процедура не имеет никаких параметров, список пуст.
Следующая часть SELECT * FROM JOBS; $$ — это последний оператор в синтаксисе хранимых процедур MySQL. Точка с запятой здесь не является обязательной, так как реальным окончанием оператора является $$.
Вызов процедуры:
CALL имя_процедуры([параметр [, ...]])
CALL имя_процедуры[()]
MySQL хранимые процедуры, которые не принимают аргументов, могут вызываться без скобок. Поэтому CALL job_data() равносильно CALL job_data.
Создание функции происходит следующим образом:
CREATE FUNCTION имя_функции ([параметр_функции [, ...]])
RETURNS тип [характеристика ...] тело_подпрограммы
Удаление процедуры/функции используется для сброса в MySQL вызванной хранимой процедуры или функции.
DROP {PROCEDURE | FUNCTION} [IF EXISTS] имя_процедуры