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

Задание

  1. Произвести средствами хранимых процедур численное интегрирование функции на отрезке.

  2. Создать процедуру, заполняющую столбец случайными значениями FLOAT.

  3. Для таблиц threads( `id` `title`, `tag`);variables` ( `id`, `name`, `value`) создать процедуру, которая добавляет значение в таблицуthreadsи увеличивает на единицу в таблицеvariables(value):threads( `id` `title`, `tag`);variables` ( `id`, `name`, `value`)

  4. Для таблиц threads( `id` `title`, `tag`);variables` ( `id`, `name`, `value`) создать процедуру вычисляющую общее количество тегов и тем.

  5. Создать процедуру для:

    1. подсчета числа записей таблицы.

    2. подсчет значений поля

    3. вывод максимального значения поля

    4. передачи изменений в базу данных

  6. Создать процедуру типа UP_DATE

  7. Для объединения записей двух таблиц (операция inner join)

  8. Создать функцию, возвращающую СКО (среднеквадратичное отклонение) от столбца с FLOAT-значениями.

  9. Создать функцию для выполнения четырех арифметических операций “+”, “-”, “*” и “/” над целыми операндами типа bigint, выполнив кодирование и проверку:

  10. Создать функцию, возвращающую таблицу с динамическим набором столбцов, выполнив кодирование и тестирование:

  11. Создать функцию, разбивающую входную строку на подстроки, используя в качестве разделителя пробелы.

  12. Создать таблицу authsmallиз таблицыauthorsбазы данныхIzdatи для новой таблицы запрограммировать триггер auth_del, который будет выводить информацию о попытках удаления и количестве удаляемых строк.

  13. Создать триггер для команд INSERTиUPDATE, запрещающий производить изменения для автораBillyGeitsi.

  14. Создать триггер auth_upd для таблицы authsmall, построенный в 9 задании, который будет разрешать изменение столбца au_id этой таблицы всем, кроме владельцаdbo.

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

  16. Создать триггер, переводящий 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