
- •1. Подготовка и допуск к работе
- •2. Содержание отчета
- •Лабораторная работа №15
- •Лабораторная работа № 16
- •Пример: backup table vines,query,client,distributor,delivery to c:/mysql_bak';
- •Удалены 3 таблицы. Теперь восстановим их.
- •Пример: optimizetablEmytable
- •Лабораторная работа №17
- •Значение usage можно задавать, если необходимо создать пользователя без привилегий.
- •Примеры:
- •Доступ к MySql из сети
- •С помощью утилиты Mysqlshow выполните команду на просмотр структуры и состав таблиц базы Mysql. Приведите в отчете её схему.
- •Лабораторная работа №18
- •Тема: Файлы журналов MySql Репликация в MySql
- •Цель: Формирование умений и знаний для работы в среде субд Mysql.
- •Журнал ошибок
- •Общий журнал запросов
- •Журнал обновлений (update)
- •Бинарный журнал обновлений
- •Журнал медленных запросов
- •Обслуживание файлов журналов
- •Репликация в MySql
- •Настройка репликации
- •Лабораторная работа № 19-20
- •Сохраненные процедуры и функции
- •Сохраненные подпрограммы и таблицы предоставления привилегий
- •Синтаксис хранимых процедур
- •Синтаксис alter procedure и alter function
- •Синтаксис drop procedure и drop function
- •Синтаксис команды call
- •Синтаксис составного оператора begin ... End
- •Синтаксис declare
- •Переменные в сохраненных подпрограммах Локальные переменные declare
- •Команда set
- •Команда select ... Into
- •Условия и драйверы
- •Declare условий
- •Declare драйвера
- •Курсоры
- •Объявление курсоров
- •Инструкция case
- •Инструкция loop
- •Инструкция leave
- •Инструкция iterate
- •5.2.10.6. Инструкция repeat
- •Инструкция while
- •Задание
- •Приложение а
- •Демонстрируется использование mysql в качестве несложного калькулятора:
- •Проверка таблицы при помощи команды describe:
- •Выборка всех данных
- •Выборка определенных строк. Выборка с условием
- •Операторы and и or можно использовать совместно.
- •Предположим, нужно узнать, в каком возрасте животные давали приплод:
- •В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.
- •Сортировку можно проводить по нескольким столбцам сразу.
- •Отсортировать результаты по возрасту также можно при помощи выражения orderby:
- •Максимальное значение столбца
Задание
Произвести средствами хранимых процедур численное интегрирование функции на отрезке.
Создать процедуру, заполняющую столбец случайными значениями FLOAT.
Для таблиц threads( `id` `title`, `tag`);variables` ( `id`, `name`, `value`) создать процедуру, которая добавляет значение в таблицуthreadsи увеличивает на единицу в таблицеvariables(value):threads( `id` `title`, `tag`);variables` ( `id`, `name`, `value`)
Для таблиц threads( `id` `title`, `tag`);variables` ( `id`, `name`, `value`) создать процедуру вычисляющую общее количество тегов и тем.
Создать процедуру для:
подсчета числа записей таблицы.
подсчет значений поля
вывод максимального значения поля
передачи изменений в базу данных
Создать процедуру типа UP_DATE
Для объединения записей двух таблиц (операция inner join)
Создать функцию, возвращающую СКО (среднеквадратичное отклонение) от столбца с FLOAT-значениями.
Создать функцию для выполнения четырех арифметических операций “+”, “-”, “*” и “/” над целыми операндами типа bigint, выполнив кодирование и проверку:
Создать функцию, возвращающую таблицу с динамическим набором столбцов, выполнив кодирование и тестирование:
Создать функцию, разбивающую входную строку на подстроки, используя в качестве разделителя пробелы.
Создать таблицу authsmallиз таблицыauthorsбазы данныхIzdatи для новой таблицы запрограммировать триггер auth_del, который будет выводить информацию о попытках удаления и количестве удаляемых строк.
Создать триггер для команд INSERTиUPDATE, запрещающий производить изменения для автораBillyGeitsi.
Создать триггер auth_upd для таблицы authsmall, построенный в 9 задании, который будет разрешать изменение столбца au_id этой таблицы всем, кроме владельцаdbo.
Средствами триггеров осуществлять поддержание актуального состояния значения среднеквадратичного отклонения величины, значения которой хранятся в определенной таблице.
Создать триггер, переводящий IPv4-адрес в вид, занимающий наименьшее количество памяти
Приложение а
select_expression может содержать следующие функции и операторы:
+ - * / |
Арифметические действия. |
% |
Остаток от деления (как в C) |
| & |
Битовые функции (используется 48 бит). |
- С |
Смена знака числа. |
<< |
Осуществляет побитовый левый сдвиг целочисленного значения. |
>> |
Осуществляет побитовый правый сдвиг целочисленного значения. |
BETWEEN(A,B,C) |
(A >= B) AND (A <= C). |
BIT_COUNT() |
Количество бит. |
ELT(N,a,b,c,d) |
Возвращает a, если N == 1, b, если N == 2 и т. д. a, b, c, d строки. ELT(3, “First”, “Second”, “Third”, “Fourth”) вернет “Third”. |
FIELD(Z,a,b,c) |
Возвращает a, если Z == a, b, если Z == b и т. д. a, b, c, d строки. FIELD(“Second”, “First”, “Second”, “Third”, “Fourth”) вернет “Second”. |
IF(A,B,C) |
Если A истина (!= 0 and != NULL), то вернет B, иначе вернет C. |
IFNULL(A,B) |
Если A не null, вернет A, иначе вернет B. |
ISNULL(A) |
Вернет 1, если A == NULL, иначе вернет 0. Эквивалент ('A == NULL'). |
NOT ! |
NOT, вернет TRUE (1) или FALSE (0). |
OR, AND |
Вернет TRUE (1) или FALSE (0). |
SIGN() |
Вернет -1, 0 или 1 (знак аргумента). |
expr LIKE expr |
Вернет TRUE (1) или FALSE (0). |
expr NOT LIKE expr |
Вернет TRUE (1) или FALSE (0). |
expr REGEXP expr |
Проверяет строку на соответствие регулярному выражению expr. |
expr NOT REGEXPexpr |
Проверяет строку на соответствие регулярному выражению expr. |
select_expression может также содержать математические функции.
ABS() |
Абсолютное значение (модуль числа). |
EXP() |
Экспонента. |
FORMAT(nr,NUM) |
Форматирует число в формат '#,###,###.##' с NUM десятичных цифр. |
LOG() |
Логарифм. |
MOD() |
Остаток от деления (аналог %). |
POW() |
Степень. |
ROUND() |
Округление до ближайшего целого числа. |
RAND([integer_expr]) |
Случайное число типа float, 0 <= x <= 1.0, используется integer_expr как значение для запуска генератора. |
SQRT() |
Квадратный корень. |
select_expression может также содержать одну или больше следующих строковых функций.
CONCAT() |
Объединение строк. |
INTERVAL(A,a,b,c,d) |
Возвращает 1, если A == a, 2, если A == b... Если совпадений нет, вернет 0. A,a,b,c,d... строки. |
INSERT(org,strt,len,new) |
Заменяет подстроку org[strt...len(gth)] на new. Первая позиция строки=1. |
LCASE(A) |
Приводит A к нижнему регистру. |
LEFT() |
Возвращает строку символов, отсчитывая слева. |
LENGTH() |
Длина строки. |
LOCATE(A,B) |
Позиция подстроки B в строке A. |
LOCATE(A,B,C) |
Позиция подстроки B в строке A, начиная с позиции C. |
LTRIM(str) |
Удаляет все начальные пробелы из строки str. |
REPLACE(A,B,C) |
Заменяет все подстроки B в строке A на подстроку C. |
RIGHT() |
Get string counting from right. |
RTRIM(str) |
Удаляет хвостовые пробелы из строки str. |
STRCMP() |
Возвращает 0, если строки одинаковые. |
SUBSTRING(A,B,C) |
Возвращает подстроку из A, с позиции B до позиции C. |
UCASE(A) |
Переводит A в верхний регистр. |
Несколько просто полезных функций, которые тоже можно применить в select_expression.
CURRDATE() |
Текущая дата. |
DATABASE() |
Имя текущей базы данных, из которой выполняется выбор. |
FROM_DAYS() |
Меняет день на DATE. |
NOW() |
Текущее время в форматах YYYYMMDDHHMMSS или “YYYY-MM-DD HH:MM:SS”. |
PASSWORD() |
Шифрует строку. |
PERIOD_ADD(P:N) |
Добавить N месяцев к периоду P (в формате YYMM). |
PERIOD_DIFF(A,B) |
Возвращает месяцы между A и B. Обратите внимание, что PERIOD_DIFF работает только с датами в форме YYMM или YYYMM. |
TO_DAYS() |
Меняет DATE (YYMMDD) на номер дня. |
USER() |
Возвращает логин текущего пользователя. |
WEEKDAY() |
Возвращает день недели (0 = понедельник, 1 = вторник, ...). |
Следующие функции могут быть использованы в предложении GROUP:
AVG() |
Среднее для группы GROUP. |
SUM() |
Сумма элементов GROUP. |
COUNT() |
Число элементов в GROUP. |
MIN() |
Минимальный элемент в GROUP. |
MAX() |
Максимальный элемент в GROUP. |
Здесь MIN() и MAX() могут принимать строку или число в качестве аргумента. Эти функции не могут использоваться в выражении, хотя их параметр может быть выражением:
Пример: “SUM(value/10)” нормально, но вот “SUM(value)/10” уже нет!
Функции
Для функций, работающих с позициями в строке, нумерация позиций начинается с 1.
COUNT(expr)Возвращает количество величин со значением, не равным NULL, в строках, полученных при помощи команды SELECT:
SELECT student.student_name,COUNT(*) FROM student,course
WHERE student.student_id=course.student_id GROUP BY student_name;
COUNT(*)оптимизирована для очень быстрого возврата результата при условии, что команда SELECT извлекает данные из одной таблицы, никакие другие столбцы не обрабатываются и функция не содержит выражения WHERE.Например SELECT COUNT(*) FROM student;
COUNT(DISTINCT expr,[expr...]) Возвращает количество различающихся величин со значением, не равнымNULL:SELECT COUNT(DISTINCT results) FROM student;
AVG(expr)Возвращает среднее значение аргумента expr:
SELECT student_name, AVG(test_score) FROM student GROUP BY student_name;
MIN(expr) , MAX(expr)Возвращает минимальную или максимальную величину аргумента expr. Функции MIN() и MAX() могут принимать строковый аргумент; в таких случаях они возвращают минимальную или максимальную строковую величину.
SELECT student_name, MIN(test_score), MAX(test_score) FROM student GROUP BY student_name;
SUM(expr)Возвращает сумму величин в аргументе expr. Обратите внимание: если возвращаемый набор данных не содержит ни одной строки, то функция возвращает NULL!
Например, SELECT order.custid,customer.name,MAX(payments) FROM order,customer WHERE order.custid = customer.custid GROUP BY order.custid;
value BETWEEN value1 AND value2 Выбирает записи, еслиvalue находится в диапазоне междуvaluel иvalue2 или равно одному из них.
value IN (valuel,value2,... ) Выбирает записи, если value находится среди указанных значений.
value NOT IN (value1, value2,.., ) Выбирает записи, еслиvalue не находится среди указанных значений.
valuel LIKE value2 Сравниваетvalue1 иvalue2 и выбирает записи, где они совпадают. Значение справа может содержать знак подстановки ' %', которому удовлетворяет любое число символов (включая 0) и знак '_', заменяющий ровно один символ. Чаще всего используется сравнение поля с некоторым символом и знаком подстановки ( SELECT name FROM people WHERE name LIKE 'B%' ).
valuel NOT LIKE value2 Сравниваетvaluel иvalue2 и выбирает записи, где они не совпадают. Команда идентична NOT(valuel LIKEvalue2).
valuel REGEXP/RLIKE value2 Сравниваетvaluel иvalue2, используя расширенный синтаксис регулярных выражений, и выбирает записи, если они совпадают. Значение справа может содержать полные подстановочные выражения ( SELECT name FROM people WHERE name RLIKE '^B. *').
valuel NOT REGEXP value2 Сравниваетvaluel иvalue2, используя расширенный синтаксис регулярных выражений, и выбирает записи, если они не совпадают. Команда идентична NOT(valuel REXEXPvalue2). Предложение WHERE вернет все полученные в выражении значения, которые отличаются от 0 или NULL (т. е. все, что не является логически ложным). Поэтому SELECT age FROM people WHERE age>10 вернет только те записи, где возраст больше 10.
ПРИЛОЖЕНИЕ В
Настройка репликации
Головной сервер
1. Создать пользователя
grant replicatoin slave, reload, super, select on *.* to repl@'%' identified by <пароль>
2. в my.ini
[mysqld]
port=3306
log-bin
server-id=1
3. перезапустить сервер.
4. Открыть сервер и запустить комманду
show master status;
Запомнить её результат. Особенно File и position
Подсоединённый сервер.
1. в my.ini
[mysqld]
server-id= от 2 до 2^(32-1) (Не вводить id равный 1!)
2. Перезапустить сервер.
3. Комманда
slave stop;
4. Комманда
change master to
master_host='<Адрес головного сервера>',
master_user='repl',
master_password='<Пароль пользователя на головном сервере>',
master_log_file='<Имя файла синхронизации>',
master_log_pos=<позиция с которой необходимо осуществить синхронизацию>;
5. Комманда
slave start;
Головной сервер
5. Комманда
flush tables with read lock;
Подсоединённый сервер:
6. Комманда:
load data from master;
Головной сервер
6. Комманда
unlock tables;
ПРИЛОЖЕНИЕ С
ПРИМЕРЫ ПОСТРОЕНИЯ ЗАПРОСОВ
mysql> SELECT VERSION(), CURRENT_DATE;
VERSION() |
CURRENT_DATE |
3.22.20a-log |
1999-03-19 |