Базы данных и знаний. Лабораторный практикум для студентов

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Экономический факультет
Кафедра экономической информатики
БАЗЫ ДАННЫХ И ЗНАНИЙ
Лабораторный практикум
для студентов специальности
1-25 01 12 – Экономическая информатика
Минск
2015
ВВЕДЕНИЕ
В настоящее время предоставляется все больше телекоммуникационных услуг.
Для учета клиентов, фактов предоставления, оплаты используются базы данных.
Поэтому специалисту в данной области необходимо знать и уметь использовать
средства обработки данных.
Для выполнения лабораторных работ необходимо использовать СУБД MySQL.
Дистрибутивы и справочную информацию можно найти на Интернет-сайте по адресу http://mysql.com.
Лабораторный практикум предназначен для студентов, изучающих язык SQL.
Лабораторная работа № 1
СОЗДАНИЕ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ
Цель работы: сформировать знания и умения по работе с MySQL Query
Browser и MySQL Administrator, приобрести практические навыки работы с MySQL
Query Browser для создания и редактирования баз данных и таблиц.
Краткие теоретические сведения
MySQL Query Browser является графической клиентской программой для работы с СУБД MySQL. Она предоставляет следующие дополнительные возможности, которые упрощают процесс написания программ и обработки данных за счет
визуального представления информации:
- создания структуры новой базы,
- наполнение ее содержимым,
- редактирование содержимого;
- написание запросов, триггеров, хранимых процедур;
- просмотр результатов выполнения запросов.
Вызов осуществляется после запуска файла MySQLQueryBrowser.exe. После запуска программы на экране появляется окно, представленное на рисунке 1
Рисунок 1 – Окно входа в программу.
2
В поле Server Host необходимо ввести значение localhost. В поле Port пишется
значение порта, который использует СУБД MySQL (обычно 3306). В поле Username
вводим значение имени пользователя, который будет работать в данный момент (по
умолчанию имя суперпользователя со всеми правами root) и в поле Password – пароль данного пользователя. Вид основного экрана представлен на рисунке 2.
Рисунок 2 – Вид основного экрана MySQLQueryBrowser.
Основной экран программы состоит из шести различных по функциональному
назначению частей: строки меню; редактор SQL –запросов; редактор структуры БД;
области данных; строки сообщений и контекстной справки.
Строка меню. Строка меню активизируется щелчком по левой кнопке мыши.
Она содержит следующие пункты.
File – обеспечивает выполнение основных операций над файлами.
Edit – выполняет операции по редактированию текста
View – выполняет операции по настройке внешнего вида программы.
Query – обеспечивает выполнение основных операций по созданию, выполнению SQL-запросов, которые находятся в редакторе SQL-запросов.
Script – обеспечивает выполнение основных операций по созданию, выполнению и отладке хранимых процедур.
Tools – выполняет некоторые программы без выхода из MySQLQueryBrowser
(MySQLAdministrator), устанавливает опции программы.
Help – вызывает справочную информацию по работе с программой.
Редактор SQL-запросов. Он позволяет набирать и выполнять SQL-запросы. Результат выполнения запроса отображается в рабочей зоны для просмотра результатов выполнения SQL-запросов и редактирования данных.
3
Область данных. В области данных выводятся данные, выбранные в результате
выполнения SQL-запросов.
Строка сообщений. В ней отображаются результат выполнения запроса: либо
сообщение об ошибке, либо сведения об обработанных данных.
Контекстная справка. В данной области помещен электронный справочник по
языку SQL.
Редактор структуры БД. Позволяет просматривать структуру имеющихся баз
данных, добавлять, редактировать и удалять объекты баз данных (таблицы, представления, хранимые процедуры, триггеры). Для работы с объектами необходимо
щелкнуть правой кнопкой мыши и из появившегося меню выбрать необходимую
функцию. Одним из важных инструментов по работе с данными является редактор
таблиц. Вид его основного экрана представлен на рисунке 3.
Рисунок 3 – Вид основного экрана редактора таблиц.
Редактор предоставляет визуальные возможности по созданию SQL-запроса на
создание либо изменение таблицы. В поле Table Name указывается имя создаваемой
таблицы, в поле Database указывается, к какой базе данных принадлежит таблица, в
поле Comment можно сделать комментарий к создаваемой таблице. На вкладке
Columns and Indeces создается структура таблицы (название столбцов и их тип данных), на вкладке Table Options и Advanced Options указываются свойства таблицы
(тип, кодировка и другие). На вкладке Indices создаются ключи и индексы таблицы.
После того, как необходимые данные внесены, необходимо нажать на кнопку Apply
Changes, в результате чего на экран выведется окно, содержащее SQL-запрос, кото4
рый необходимо выполнить, чтобы существующие изменения были произведены в
базе данных. Вид окна представлен на рисунке 4.
Рисунок 4 – Окно запроса.
Для подтверждения выполнения запроса необходимо нажать кнопку Execute.
Нажатие кнопки Cancel приведет к закрытию окна запроса и возврату в редактор
таблицы.
Для просмотра данных, а также дальнейшего их редактирования необходимо в
редакторе структуры БД дважды щелкнуть мышкой по требуемой базе данных, а
затем в открывшемся списке таблиц этой базы данных дважды щелкнуть мышкой по
нужной таблице. После этого в редакторе SQL-запросов появится запрос на выборку
данных из таблицы. Для того чтобы просмотреть данные, необходимо нажать кнопку «Execute». В результате в рабочей зоне появятся данные из таблицы.
Рисунок 5 – Результат выполнения запроса на выборку данных из таблицы catalogs базы данных shop.
5
Для редактирования данных необходимо в рабочей зоне нажать кнопку «Edit» и
далее, дважды щелкнув мышкой по ячейке, мы можем редактировать данные в ней.
Ячейки, в которых данные изменены, будут выделены цветом. Для сохранения изменений в базе данных необходимо нажать кнопку «Apply Changes». В случае
успешного сохранения данных выделение цветом ячейки снимается. Если же произошла ошибка, то ячейки выделяются красным цветом. Нажав кнопку «Discard
Changes», мы можем отменить все сделанные изменения.
MySQL Administrator является графической клиентской программой для работы с СУБД MySQL. Она предоставляет следующие дополнительные возможности,
которые упрощают процесс администрирования базы данных за счет визуального
представления информации:
- создание резервных копий базы данных
- создание пользователей.
Для создания резервной копии базы данных необходимо выбрать операцию
Backup. Вид его основного экрана представлен на рисунке 6.
Рисунок 6 – Вид экрана создания резервной копии базы данных.
Нажать кнопку New Project. В поле Project Name задать имя проекта. Далее выделяем базы данных для которых нужно делать резервные копии. С помощью
стрелки направляем их в поле Backup Content. Для завершения процесса создания
резервной копии нажимаем кнопку “Execute Backup Now”.
Создание пользователя. Выбрать операцию User Administration. Вид его основного экрана представлен на рисунке 7.
6
Рисунок 7 – Вид экрана управления пользователями.
Нажать на кнопку New User. Заполнить на вкладке User Information данные о
пользователе, в том числе имя и пароль. Далее перейти на вкладку Schema Privileges
(вид его основного экрана представлен на рисунке 8) и назначить права для данного
пользователя на доступ к каждой из баз данных.
Рисунок 8 – Вид экрана управления правами пользователя.
7
Для этого выделяем щелчком мыши базу данных, затем из поля Available Privileges с помощью стрелки выбираем права пользователя для выделенной базы данных. Для этого выделяем право и с помощью стрелки отправляем его в поле Assigned Privileges. Для завершения процесса создания пользователя необходимо
нажать кнопку Apply changes.
Альтернативным средством работы с базой данных является консольный клиент
mysql. Для подключения к базе данных с помощью данного клиента необходимо
набрать в командной строке команду
Bin>mysql –u user –ppassword, где
User – имя пользователя
Password – пароль пользователя.
Рисунок 9 – Подключение к MySQL из командной строки.
Результат выполнения команды представлен на рисунке. После вывода версии
сервера и информации о справочных ключах выводится приглашение mysql>, после
которого можно набирать команды.
Создание баз данных. Для того чтобы создать базу данных как в MySQL
Browser, так и в консоли, необходимо воспользоваться оператором CREATE
DATABASE, который создает базу данных с указанным именем.
CREATE DATABASE [IF NOT EXISTS] db_name;
Оператор DROP DATABASE удаляет все таблицы в указанной базе данных и
саму базу.
DROP DATABASE [IF EXISTS] db_name;
Создание таблиц. Для создания таблиц можно воспользоваться как средствами MySQL QueryBrowser, так и оператором CREATE TABLE, который создает
таблицу с заданным именем в текущей базе данных, из консоли.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
Пример:
mysql> CREATE TABLE test (a INT NOT NULL,
8
a TEXT, b DATE);
Эта команда создаст таблицу MyISAM с тремя столбцами a, b и c.
Создание резервной копии базы данных. Создать копию базы данных можно
средствами MySQL QueryBrowser, а можно воспользоваться предназначенной для
этого утилитой mysqldump. Для создания резервной копии необходимо в командной
строке набрать команду
\bin> mysqldump –u user –ppassword dbname > filename.sql, где
user – имя пользователя.
password – пароль пользователя.
dbname – имя базы данных, для которой необходимо создать резервную копию.
filename – имя файла, в котором необходимо сохранить резервную копию.
Для развертывания резервной копии необходимо в командной строке набрать
следующую команду:
\bin> mysql –u user –ppassword dbname < filename.sql, где
user – имя пользователя.
password – пароль пользователя.
dbname – имя базы данных, в которую необходимо развернуть копию.
filename – имя файла, в котором хранится резервная копия.
Порядок выполнения работы
1. Изучить теоретические сведения по теме: «Создание реляционных баз данных».
2. Откройте интегрированную среду MySQL Query Browser и найдите все элементы экрана, описанные в данной лабораторной работе. Изучите пункты меню
MySQL Query Browser. Наиболее часто используемые пункты меню законспектируйте.
3. Откройте интегрированную среду MySQL Query Administrator и найдите все
элементы экрана, описанные в данной лабораторной работе. Изучите пункты меню
MySQL Query Administrator. Наиболее часто используемые пункты меню законспектируйте.
4. C помощью MySQL Query Browser создать базу данных, структура которой
представлена в приложении А.
5. Заполнить базу данных. База данных должна содержать не менее 4 отделов, не
менее 2 сотрудников в каждом отделе, не менее 3 проектов, не менее трех заданий в
каждом проекте, среди которых имеются как фактически сданные, так и не сданные
задания.
6. Создать резервную копию базы данных.
7. Показать созданную базу данных преподавателю.
8. Ответить на контрольные вопросы.
Контрольные вопросы
1. Из каких частей состоит основной экран программы MySQLQueryBrowser?
2. Как создать и заполнить таблицу средствами MySQLQueryBrowser?
3. Как подключиться к базе данных с помощью консольного клиента mysql?
9
4. С помощью какого оператора создается база данных?
5. Как создать резервную копию базы данных?
Лабораторная работа № 2
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ SQL
Цель работы: сформировать знания и умения по программирования на языке
SQL, приобрести практические навыки работы со средствами языка SQL для выборки и редактирования данных в БД.
Краткие теоретические сведения
Оператор SELECT.
Для выборки данных используется команда:
SELECT * | { [ DISTINCT | ALL ] { Поле данных } [,...] }
FROM { таблица [ псевдоним ] } [,...]
[ WHERE условие ]
[ GROUP BY { поле | Integer } [,...] ]
[ HAVING условие ]
[ ORDER BY { поле | Integer [ ASC|DESC ] } [,...] ]
[LIMIT start, lenght] ;
Пример. Выбирать все сведения о проектах.
SELECT * FROM projects;
SELECT id,project_name FROM projects;
Сортировка строки результирующей таблицы данных осуществляется с помощью конструкции:
ORDER BY { поле | Integer [ ASC|DESC ] } [,...]
Если ORDER BY используется внутри GROUP BY, то строки сортируются
внутри каждой группы результирующих строк. Вместо имен полей могут быть использованы их порядковые номера в списке полей результирующей таблицы. ASC
сортирует данные в восходящем порядке, DESC - в обратном.
Пример. Выбрать сведения о проектах, отсортировав их по названию проекта.
SELECT id, project_name FROM projects
ORDER BY project;
Ограничить количество выбираемых записей в запросе можно с помощью конструкции:
LIMIT start,length
start - указывает, с какой позиции нужно выдавать найденные записи
length - количествово записей.
Пример. Извлечь из выборки пять записей о проектах, начиная с записи десятой
по счету.
SELECT id, project_name FROM projects
ORDER BY project_name DESC
LIMIT 10,5;
Ограничить выбор данных из указанных таблиц можно с помощью конструкции
WHERE условие
10
Пример. Выбрать сведения о сотрудниках, работающих в первом отделе:
SELECT * FROM employees
WHERE id_depart=1;
BETWEEN::=
<Проверяемое выражение> [NOT] BETWEEN
<Начальное выражение> AND <Конечное выражение>
Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND.
Пример. Выбрать сведения о сотрудниках из первого второго и третьего отделов.
SELECT * FROM employees
WHERE id_depart BETWEEN 1 AND 3;
Предикат IN проверяет, попадают ли значения проверяемого выражения во
множество:
<Проверяемое выражение> [NOT] IN (<подзапрос>)
| (<выражение для вычисления значения>,...)
Пример. Выбрать сведения о сотрудниках из первого и третьего отделов.
SELECT * FROM employees WHERE id_depar IN(1,3);
Для сравнения строк с шаблоном предназначен предикат LIKE:
<проверяемое значение> [NOT] LIKE <шаблон>
[ESCAPE <символ>]
Пример. Найти все проекты, названия которых начинаются с буквы А.
SELECT * FROM project WHERE project LIKE 'А%'; Стандартом предусмотрены следующие строковые функции.
Функция
Описание
CONCAT()
Объединение строк.
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.
SUBSTRING(A,B,C)
Возвращает подстроку из A, с позиции B до позиции C.
LTRIM(str)
Удаляет все начальные пробелы из строки str.
11
RTRIM(str)
Удаляет хвостовые пробелы из строки str.
REPLACE(A,B,C)
Заменяет все подстроки B в строке A на подстроку C.
STRCMP()
Возвращает 0, если строки одинаковые.
UCASE(A)
Переводит A в верхний регистр.
Пример. Вывести названия проектов в верхнем регистре.
SELECT UCASE(project_name) FROM projects;
Предикат IS [NOT] NULL позволяет проверить отсутствие (наличие) значения в полях таблицы.
Пример. Выбрать сведения о несданных заданиях:
SELECT * FROM tasks WHERE date_turn IS NULL;
Для группировки данных используется конструкция:
GROUP BY { поле | Integer } [,...]
Стандартом предусмотрены следующие агрегатные функции:
Функция
Описание
COUNT(*)
Возвращает количество строк источника записей.
COUNT(<имя поля>)
Возвращает количество значений в указанном столбце.
SUM(<имя поля>)
Возвращает сумму значений в указанном столбце.
AVG(<имя поля>)
Возвращает среднее значение в указанном столбце.
MIN(<имя поля>)
Возвращает минимальное значение в указанном столбце.
MAX(<имя поля>)
Возвращает максимальное значение в указанном столбце.
Пример. Посчитать, сколько заданий в каждом проекте.
SELECT id_project, COUNT(*) FROM tasks
GROUP BY id_project ;
Конструкция HAVING условие используется вместе с GROUP, для того чтобы
выбирать только определенные группы строк данных, которые удовлетворяют указанному условию.
Пример. Вывести сведения о проектах, в которых больше трех заданий.
SELECT id_project FROM tasks
GROUP BY id_project
HAVING COUNT(*)>3;
Часто для решения задач необходимо выбирать данные, находящиеся в разных,
связанных логически между собой таблицах. Синтаксис соединения таблиц по предикату имеет вид:
12
FROM <таблица 1> [INNER] | {{LEFT | RIGHT | FULL } [OUTER]} JOIN
<таблица 2>[ON <предикат>]
Пример. Вывести номер телефона сотрудника Василькова.
SELECT departments.phone
FROM employees JOIN departments
ON(employees.id_depart = departments.id_depart)
WHERE employees.surname="Васильков";
<запрос 1> UNION [ALL] <запрос 2>;
Оператор UNION объединяет выходные строки каждого из запросов в один результирующий набор.
SELECT id_employee, salary_hour FROM employees WHERE id_depart
UNION
SELECT distinct id_employee, salary_hour
FROM employees join tasks on (employees.id_employee =tasks.id_empl) JOIN projects ON (tasks.id_project=projects.id_project)
WHERE project= "P1"
ORDER BY salary_hour;
EXISTS (подзапрос)
Предикат EXISTS принимает значение TRUE, если подзапрос возвращает любое
количество строк, иначе его значение равно FALSE.
Пример. Выбрать проекты, которые не выполняются в данный момент.
SELECT id_project FROM projects WHERE NOT EXISTS (SELECT id FROM
tasks WHERE id_project= projects.id_project)
<выражение> <оператор сравнения> ALL|ANY(SOME) (<подзапрос>)
ANY(SOME). Проверяемое значение поочередно сравнивается с каждым элементом, который возвращает вложенный запрос. Если хотя бы одно из сравнений
истинно, то строчка выводится на экран.
Пример. Извлечь из списка сотрудников, сдавших хотя бы одно задание в этом
месяце.
SELECT id_employee, surname, id_depart FROM employees as e
WHERE id_employee = ANY
(SELECT id_empl FROM tasks WHERE
month(date_turn)=month(NOW())and id_empl=e.id_employee );
ALL. Проверяемое значение поочередно сравнивается с каждым элементом, который возвращает вложенный запрос, но строка выводится на экран, когда все сравнения истинны.
SELECT id_employee, surname, id_depart FROM employees as e
WHERE id_employee != ALL
(SELECT id_empl FROM tasks WHERE
month(date_turn)=month(NOW())and id_empl=e.id_employee );
Запрос выведет фамилия сотрудников, которые не сдавали задания в текущем
месяце
Функция IF(). Функция предназначена для логического выбора и имеет следующий синтаксис
IF(expr1, expr2, expr3);
Если expr1 истинно, то функция возвращает expr2, иначе expr3.
13
Пример. Указать занятость сотрудников
SELECT id_employee, if(count(tasks.id)<1,"free", "busy") as busyness
FROM employees left join tasks on(employees.id_employee=tasks.id_empl)
WHERE date_turn is NULL GROUP BY id_employee;
В данном примере используется оператор as для назначения нового имени
столбцу. Результату выполнения функции if() в запросе присвоится новый псевдоним busyness.
Функции для работы с датой и временем. Стандартом предусмотрены следующие функции:
Функция
Описание
ADDDATE(date,
INTERVAL expr type)
Возвращает время date, к которому прибавлен временной
интервал, определяемый вторым параметром.
DATEDIFF(begin,end)
Вычисляет разницу в днях между датами begin и end.
DATE_FORMAT(date,
format)
Форматирует время date в соответствии со строкой format.
NOW()
Возвращает текущие дату и время в виде строки в формате
`YYYY-MM-DD hh:mm:ss`.
Пример. Вывести сколько дней выполнялось каждое из заданий.
SELECT id_project, task_number, DATEDIFF(date_delivery, date_turn) FROM
tasks;
Оператор INSERT.
Для добавления данных используется команда:
INSERT INTO таблица [ ( поле [,...] ) ]
{ VALUES ( значение [,...] ) };
Пример. Добавить отдел 3 с номером телефона 3-33 и отдел 4 с номером телефона 4 -44.
INSERT INTO departments (id_depart, phone)
VALUES ( 3, '3-33' ),(4, '4-44');
Оператор UPDATE.
Для редактирования данных используется команда:
UPDATE таблица
SET { поле=значение } [,...]
[ { WHERE условие } ]
Пример. Увеличить на 10% зарплату сотрудникам первого отдела.
UPDATE employees
SET salary_hour = salary_hour* 1.1
WHERE id_depart=1;
Пример. Уменьшить на 10% цена десяти самых дорогих товаров.
UPDATE products SET price = price*0.9 ORDER BY price LIMIT 10;
14
Замечание. Не забывать писать условия обновления данных с помощью
WHERE! Иначе будут обновлены поля всех строк таблицы!
Оператор DELETE.
Для удаления данных используется команда:
DELETE FROM таблица [ WHERE условие ]
Пример. Удалить все строки таблицы tasks, относящиеся к проекту с идентификатором 1.
DELETE FROM tasks WHERE id_project=1
Пример. Удалить из таблицы orders три самых старых заказа.
DELETE FROM orders ORDER BY order time DESC LIMIT 3;
Замечание. Не забывать писать условия удаления данных с помощью WHERE!
Иначе будут удалены все строки таблицы!
Экспорт данных.
Синтаксис:
SELECT * INTO OUTFILE имя файла
{FIELDS TERMINATED BY} символ {ENCLOSED BY}символ
{LINES STARTING BY} символ {TERMINATED BY} символ
FROM имя таблицы
Используется, для того чтобы записывать результат SELECT-команды в текстовый файл.
LINES – определяет формат строки данных, соответствующей записи.
FIELDS – определяет формат поля данных.
TERMINATED BY – определяет символ-разделитель между полями в строке.
ENCLOSED BY – определяет символ кавычек, которыми ограничиваются поля.
Пример. Вывести в текстовый файл данные из таблицы catalogs в порядке возрастания индексов.
SELECT * INTO OUTFILE „test.sql‟
FIELDS TERMINATED BY „,‟ ENCLOSED BY „”‟
LINES TERMINATED BY “\r\n”
FROM catalogs ORDER BY id_catalog;
Импорт данных.
Синтаксис:
LOAD DATA INFILE имя файла [ REPLACE | IGNORE]
INTO имя таблицы[
{FIELDS TERMINATED BY } символ {ENCLOSED BY}символ
{LINES STARTING BY} символ {TERMINATED BY} символ ]
Используется, для того чтобы добавлять данные в таблицу базы данных из текстового файла.
IGNORE – пропуск строк с дублирующими значениями.
REPLACE – замена уже существующих записей новыми.
Пример. Загрузить данные из файла следующего формата
"1","Сетевые адаптеры"
"2","Программное обеспечение"
в таблицу catalogs.
LOAD DATA INFILE 'test.dat'
15
REPLACE INTO TABLE catalogs
FIELDS TERMINATED BY ', ' ENCLOSED BY ""
LINES TERMINATED BY '\r\n';
Порядок выполнения работы
1. Изучить теоретические сведения по теме «Основы программирования на языке SQL».
2. Открыть с помощью MySQueryBrowser базу данных, созданную в предыдущей лабораторной работе.
3. Создать к базе данных SELECT-запросы следующих видов:
- запрос, выбирающий все данные из таблицы;
- запрос, выбирающий данные из некоторых столбцов таблицы;
- запрос с использованием ключевого слова DISTINCT;
- запрос с использованием сортировки данных;
- запрос с использованием ограничения на выборку данных;
- запрос с использованием предикатов сравнения;
- запрос с использованием предиката BETWEEN;
- запрос с использованием предиката IN, содержащий подзапрос;
- запрос с использованием предиката LIKE и строковых функций;
- запрос с использованием предиката IS NULL;
- запрос с использованием агрегатных функций;
- запрос с использованием агрегатных функций и предложения HAVING;
- запрос, выбирающие данные из нескольких таблиц с использованием соединения по предикату;
- запрос с использованием оператора UNION;
- запрос с использованием предиката EXISTS;
- запрос с использованием ключевых слов ANY|ALL;
- запрос с использованием функции IF();
- запрос с использованием функций даты и времени.
4. Создать к базе данных INSERT-запросы следующих видов:
- запрос, вставляющий в таблицу одну запись;
- запрос, вставляющий в таблицу три записи.
5. Создать UPDATE-запросы следующих видов:
- запрос, изменяющий значения в одном поле в записях, удовлетворяющих заданному условию, в одной таблице;
- запрос, изменяющий значения в нескольких полях в записях, удовлетворяющих заданному условию, в одной таблице;
- запрос использованием конструкции ORDER BY LIMIT;
- запрос, изменяющий несколько значений в полях в записях, удовлетворяющих заданному условию, находящихся в разных таблицах.
6. Создать DELETE-запросы следующих видов:
- запрос, удаляющий набор записей, удовлетворяющих заданному условию из
одной таблицы;
- запрос с использованием конструкции ORDER BY LIMIT;
16
- запрос, удаляющий набор записей, удовлетворяющих заданному условию из
нескольких таблицы.
7. Осуществить выгрузку данных из одной из таблиц базы данных в файл и очистить данную таблицу.
8. Загрузить данные из файла, полученного при экспорте данных в соответствующую таблицу.
9. Создать отчет, включив в него описание работы по пунктам 3–7, ответы на
контрольные вопросы.
Контрольные вопросы
1. С помощью какого оператора производится выборка данных?
2. С помощью какого оператора производится добавление данных?
3. С помощью какого оператора производится обновление данных?
4. С помощью какого оператора производится удаление данных?
5. Каким образом выбрать данные из нескольких таблиц?
6. В чем разница между WHERE и HAVING?
17
Лабораторная работа № 3
УПРАВЛЕНИЕ ТРАНЗАКЦИЯМИ
Цель работы: cформировать знания и умения по работе с транзакциями, приобрести практические навыки работы с транзакциями в СУБД MySQL .
Краткие теоретические сведения
В MySQL имеется следующий набор инструментов для работы с транзакциями .
Синтаксис BEGIN/COMMIT/ROLLBACK
По умолчанию MySQL выполняется в режиме autocommit. Это означает, что,
как только сделана модификация, MySQL сохранит ее на диск. Если же используются транзакционно-безопасные таблицы (подобно BDB, InnoDB), то можно перевести
MySQL в режим не-autocommit следующей командой:
SET AUTOCOMMIT=0
После чего, для чтобы сохранить изменения на диске, необходимо использовать
COMMIT, а для того чтобы игнорировать изменения, которые сделаны с начала
транзакции, необходимо использовать ROLLBACK.
Если необходимо переключать режим AUTOCOMMIT для одного набора инструкций, то можно использовать команды обрамления BEGIN или BEGIN WORK.
Пример:
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
Следует обратить внимание, что, если используются не транзакционнобезопасные таблицы, изменения будут сохранены сразу, независимо от состояния
режима autocommit. Если же делается ROLLBACK при модифицировали не транзакционно-безопасные
таблицы,
то
получится
ошибка
(ER_WARNING_NOT_COMPLETE_ROLLBACK) как предупреждение. Все транзакционно-безопасные таблицы будут восстановлены, но любая транзакционнонебезопасная таблица не будет изменяться.
Порядок выполнения работы
1. Изучить теоретические сведения по теме «Управление транзакциями».
2. Открыть с помощью MySQueryBrowser базу данных, созданную в предыдущей лабораторной работе.
3. Подключиться к серверу MySQL из командной строки (см. лабораторную работу №1).
4. Реализовать механизм транзакций для операций вставки, удаления и редактирования данных в БД:
- подключиться к БД в программе MySQLQueryBrowse;.
- подключиться r базе данных из командной строки и установить значение
autocommit=0;
18
- в командной строке выполнить запрос на модификацию данных для какойлибо таблицы и с помощью SELECT-запроса убедиться, что данные в таблице
изменились;
- открыть таблицу, над которой производили изменения командной строке, в
программе MySQLQueryBrowser и убедиться, что реального изменения данных
не произошло;
- в командной строке выполнить команду commit;
- в программе MySQLQueryBrowser снова открыть таблицу и убедьться, что
после команды commit произошла реальная перезапись данных в таблице.
5. Создать отчет, включив в него описание работы по пункту 4, ответы на контрольные вопросы.
Контрольные вопросы
1. Что такое режим autocommit, и как его отключить?
2. Какие средства для работы с транзакциями реализованы в СУБД MySQL?
Лабораторная работа № 4
ХРАНИМЫЕ ПРОЦЕДУРЫ
Цель работы: cформировать знания и умения по созданию хранимых процедур,
приобрестие практические навыки создания хранимых процедур средствами MySQL
Query Browser.
Краткие теоретические сведения
Для создания хранимых процедур и функций существуют операторы:
CREATE PROCEDURE имя_хранимой_процедуры (список параметров) тело_процедуры;
CREATE FUNCTION имя_хранимой__функции (список параметров)
[RETURNS тип_возвр_значения] тело_функции.
Формат задания параметров:
[ IN | OUT | INOUT ] имя_параметра тип.
Список аргументов, заключенный в круглые скобки, должен присутствовать
всегда. Если аргументы отсутствуют, следует использовать пустой список аргументов ( ) . Каждый аргумент по умолчанию является аргументом IN. Значения IN, OUT
или INOUT являются допустимыми только для PROCEDURE.
Конструкция RETURNS может быть определена только для FUNCTION. Она используется для указания типа результата функции, при этом в теле функции должен присутствовать оператор RETURN значение.
Тело_процедуры – допустимый оператор (операторы) языка SQL.
Пример. Создать хранимую функцию, подсчитывающую, сколько заданий в каждом
проекте.
CREATE FUNCTION countTask(projectName text) returns INT;
19
/* функция получает в качестве параметра название проекта. Возвращает количество заданий в заданном проекте*/
BEGIN
DECLARE n INT; /*количество заданий в проекте*/
SELECT count() INTO n FROM projects
JOIN tasks ON ( projects.id_project=tasks.id_project) WHERE project= projectName;
return n;
END;
Для удаления хранимой процедуры или функции используется оператор:
DROP {PROCEDURE | FUNCTION} [I F EXISTS] имя_хранимой_процедуры
Для вызова хранимой процедуры используется оператор CALL, который имеет
следующий синтаксис:
CALL имя_хранимой_процедуры( [параметр[,...]])
Для создания хранимых процедур и функций средствами MySQL Query Browser
необходимо сделать активной базу данных, для которой создается хранимая процедура (для этого необходимо дважды щелкнуть мышью по имени базы данных), далее выбрать пункт меню Script ->Create Stored Procedure/Function.
Рисунок 10 – Выбор пункта меню для создания хранимой процедуры/функции.
В появившемся окне ввести имя процедуры/функции.
Рисунок 11 – Окно для ввода имени процедуры/функции
20
В результате откроется окно для работы с процедурой/функцией. Вид представлен на рисунке 12
Рисунок 12 – Окно для работы с хранимыми процедурами.
Для завершения процесса создания процедуры/функции необходимо нажать
кнопку «Execute». В результате, если в программном коде не содержалось ошибок,
то в окне редактора структуры БД появится вновь созданная процедура.
Рисунок 13 – Окно для работы с хранимыми функциями.
21
Для вызова хранимых процедур/функций необходимо вернуться в режим работы с базой данных (перейти на вкладку «Resultset1» либо открыть новое окно, нажав
на клавишу
) и либо дважды щелкнуть мышью по нужной процедуре (параметры процедуры дописываются вручную), либо вручную написать запрос вызова процедуры/функции.
Рисунок 14 – Окно вызова хранимых процедур /функций.
На рисунке можно увидеть запросы вызова процедуры my_proc() и функции
my_func() и результат выполнения функции my_func().
Составной оператор BEGIN ... END
[метка_начала: ] BEGIN
statement (s) END [метка_конца]
Хранимые процедуры могут включать множественные операторы, благодаря составному оператору BEGIN.. .END.
Значения метка_начала и метка_конца, если оба заданы, должны быть одинаковыми.
Для использования множественных операторов необходимо, чтобы у клиента
была возможность посылать строки запросов, содержащие разделитель операторов ;.
Добиться этого можно путем применения команды delimiter в командной строке
клиента mysql. Замена завершающего запрос разделителя ; (например, на разделитель //) позволяет использовать ; в теле процедуры.
Переменные. Внутри подпрограммы можно объявлять и использовать переменные с помощью оператора DECLARE:
DECLARE имя[,...] тип [DEFAULT значение]
22
DECLARE может использоваться только внутри составного оператора BEGIN ...END
и размещается в самом его начале, перед любыми другими операторами. Область
видимости переменной ограничена блоком BEGIN ... END.
Для того чтобы присвоить значение переменной в хранимых процедурах, используется оператор:
SET имя = выражение [, имя = выражение] ...]
Для того чтобы выбранные столбцы сохранялись непосредственно в переменные,
можно применить оператор SELECT в следующем виде:
SELECT имя_столбца[,...] INTO имя_переменной[,...] табличное_выражение
Извлечена может быть только одна единственная строка.
SELECT id,data INTO x,y FROM test.tl LIMIT 1;
Конструкции управления потоком данных. В СУБД MySQL реализованы конструкции IF, CASE, LOOP, WHILE, ITERATE и LEAVE полностью. Каждая из этих конструкций может включать как единственный оператор, так и блок операторов при
использовании составного оператора BEGIN.. .END. Конструкции можно представлять
в форме вложений. Циклы FOR на данный момент не поддерживаются.
Оператор IF
IF условие_поиска THEN оператор (ы)
[ELSEIF условие_поиска THEN оператор(ы)]
[ELSE оператор(ы) ]
END IF
Если значение условие_поиска является истинным, будет выполнен соответствующий SQL-оператор. Если совпадения с условие_поиска не найдены, выполняться будет оператор, указанный в конструкции ELSE.
Оператор CASE
CASE значение_саsе
WHEN значение_when THEN оператор
[WHEN значение_when THEN оператор ...]
[ELSE оператор] END CASE
Или:
CASE
WHEN условие_поиска THEN оператор
[WHEN условие_поиска THEN оператор ...]
[ELSE оператор] END CASE
CASE реализует сложную конструкцию условия. Если значение условие__поиска является истинным, будет выполнен соответствующий SQL-оператор.
Если совпадения с условие_поиска не найдены, выполняться будет оператор из конструкции ELSE.
Оператор LOOP
[метка__начала:] LOOP
оператор(ы) END LOOP [метка_конца]
LOOP реализует простую конструкцию цикла, допуская повторное выполнение
какого-то конкретного оператора или группы операторов. Операторы в цикле повторяются до выхода из этого цикла, для чего обычно используется оператор
LEAVE.
23
Значения метка__начала и метка_конца, если заданы оба, должны быть одинаковыми.
Оператор LEAVE
LEAVE метка
Данный оператор используется для выхода из конструкции управления потоком
выполнения.
Оператор ITERATE
ITERATE метка
ITERATE может использоваться только с операторами LOOP, REPEAT и
WHILE и означает "повторить цикл снова".
Оператор REPEAT
[метка_начала:] REPEAT
оператор (ы) UNTIL условие_поиска END REPEAT [метка_конца]
Команды, указанные внутри оператора REPEAT, повторяются до тех пор, пока
будет истинным условие условие_поиска. Значения метка_начала и метка__конца,
если заданы оба, должны быть одинаковыми.
Оператор WHILE
[метка_начала: ] WHILE условие_поиска DO
оператор (ы) END WHILE [метка_конца]
Команды, указанные внутри оператора WHILE, повторяются до тех пор, пока будет истинным условие условие_поиска. Значения метка_начала и метка_конца, если
заданы оба, должны быть одинаковыми.
Пример. Написать процедуру добавления задания сотруднику.
CREATE PROCEDURE setTask (project text, taskNumber INT, fio text);
/* параметры: название проекта, номер задания, фамилия сотрудника. Возвращает 0, если задание успешно назначено, либо номер сотрудника, которому задание
уже назначено*/
BEGIN
DECLARE idProject INT; /*идентификатор проекта*/
DECLARE idWorker INT default 0; /*идентификатор работника*/
/* проверяем назначено ли это задание*/
SELECT id_employee INTO idWorker, projects.id_project INTO idProject FROM
projects JOIN tasks ON ( projects.id_project=tasks.id_project) WHERE
project=idProject and id_task = taskNumber;
IF (idWorker=0) /* если задание не назначено, то назначаем его*/
THEN BEGIN
INSERT INTO tasks VALUES (id_project, id_empl, date_delivery);
SELECT "Задание успешно назначено"; END;
ELSE
SELECT concat("Данное задание выполняет сотрудник с номером", idWorker);
END IF;
END;
Курсоры.
Если результирующий запрос возвращает несколько записей, то использование
такого запроса совместно с оператором SELECT … INTO … FROM приводит к воз24
никновению ошибки. Избежать возникновения ошибки можно, прибегнув к использованию курсоров, которые позволяют в цикле просмотреть каждую строку результирующей таблицы запросов. Работа с курсором происходит по следующему алгоритму:
1 При помощи инструкции DECLARE CURSOR связывается имя курсора с выполненным запросом.
DECLARE cursor_name CURSOR FOR select_statment;
Оператор объявляет курсор с именем cursor_name для SELECT-запроса select_statment. В рамках хранимой процедуры имя cursor_name должно быть уникальным. В момент объявления курсора при помощи DECLARE CURSOR SELECTзапрос select_statment не выполняется.
2 Оператор OPEN выполняет запрос, связанный с курсором, и устанавливает
курсор перед первой запись результирующей таблицы. Синтаксис:
OPEN cursor_name
3 Оператор FETCH помещает курсор на первую запись результирующей таблицы и извлекает данные из записи в локальные переменные хранимой процедуры.
Повторный вызов оператора FETCH приводит к перемещению курсора к следующей
записи и так до тех пор, пока записи в результирующей таблице не будут исчерпаны.
FETCH cursor_name INTO var, var1, …
После ключевого слова INTO должно быть приведено столько локальных переменных, сколько полей возвращает SELECT-запрос select_statment.
4 Оператор CLOSE прекращает доступ к результирующей таблице и ликвидирует связь между результирующей таблицей и курсором. Синтаксис:
CLOSE cursor_name
Пример. Создать хранимую процедуру, которая изменяет записи таблицы «projects» таким образом, чтобы имена проектов становились написанными с большой
буквы.
DELIMITER $$
DROP PROCEDURE IF EXISTS `employees`.`f_p` $$
CREATE PROCEDURE `employees`.`f_p` ()
BEGIN
DECLARE id_p INT; DECLARE name_p TINYTEXT;
DECLARE is_end INT DEFAULT 0;#флаг окончания работы
/*объявляем курсор для запроса, который выбирает из таблицы идентификатор записи и название каталога, написанное с большой буквы*/
DECLARE cur_p_name CURSOR FOR
SELECT id_project, concat(ucase(substring(project,1,1)),substring(project,2))
FROM projects;
# /*объявляем обработчик для ситуации, когда курсор достигает конца результирующей таблицы*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_end=1;
OPEN cur_p_name;
/*в цикле читаем данные курсора и редактируем записи*/
25
wet: LOOP
FETCH cur_p_name into id_p, name_p;
IF is_end THEN LEAVE wet;
END IF;
UPDATE projects SET project=name_p WHERE id_project=id_p;
END LOOP wet;
CLOSE cur_p_name;
END $$
DELIMITER ;
Порядок выполнения работы
1. Изучить теоретические сведения по теме «Хранимые процедуры».
2. Открыть с помощью MySQLQueryBrowser базу данных, созданную в лабораторной работе №1.
3. Создать для базы данных:
- хранимую процедуру с использованием операторов управления потоком данных;
- хранимую функцию с использованием операторов управления потоком данных;
- хранимую процедуру, вызывающую внутри себя хранимую функцию;
- хранимую процедуру, использующую внутри себя механизм транзакций;
- хранимую процедуру, использующую внутри себя механизм курсоров.
4. Создать отчет, включив в него описание и демонстрацию работы хранимых
процедур и функций, ответы на контрольные вопросы.
Контрольные вопросы
1. С помощью каких операторов создаются хранимые процедуры? Каков синтаксис данных операторов?
2. Каким образом создаются хранимые процедуры в MySQL Query Browser?
3. Какие существуют операторы для работы с переменными внутри хранимых
процедур (функций)?
4. Какие конструкции управления потоками данным реализованы в MySQL?
Лабораторная работа № 5
ТРИГГЕРЫ
Цель работы: сформировать знания и умения по созданию триггеров, приобретение практических навыков создания триггеров в MySQL.
Краткие теоретические сведения
26
Создается новый триггер с помощью оператора CREATE TRIGGER, который
имеет следующий синтаксис:
CREATE TRIGGER trigger_name trigger_time trigger_event
On tbl_name FOR EACH ROW trigger_stmt
Оператор CREATE TRIGGER создает триггер с именем trigger_name, привязанный к таблице tbl_name.Таблица должна существовать физически, т.е. не допускается привязка триггера к временной таблице или к представлению.Trigger_time указывает момент выполнения триггера и может принимать два значения:
 BEFORE – действие триггера производится до операции изменения таблицы;
 AFTER – действие триггера производится после операции изменения таблицы.
Trigger_event показывает, на какое из событий должен реагировать триггер, и может принимать три значения:
 INSERT – триггер привязан к событию вставки новой записи в таблицу;
 UPDATE – триггер привязан к событию обновления новой записи в таблицу;
 DELETE – триггер привязан к событию удаления новой записи в таблицу.
Замечание. Может быть создан только один триггер для каждого из событий
trigger_event и момента trigger_time. Т.е. для каждой таблицы может быть создано
всего шесть триггеров.
Trigger_stmt представляет тело триггера , т.е. оператор (или блок операторов),
который необходимо выполнить при возникновении события trigger_event в таблице tbl_name.
Группа операторов, заключенная в составной оператор BEGIN…END, внутри
которого допускаются специфичные для хранимой процедуры синтаксис, операторы
и конструкции:
 составные операторы begin…end;
 операторы управления потоком (if, case, while, loop, repeat, leave, iterate);
 объявления локальных переменных при помощи оператора DECLARE и назначенных им значений при помощи оператора SET;
 именованные условия и обработки ошибок.
Для доступа к новым и старым записям используются префиксы new и old соответственно, т.е. если в таблице обновляется поле total, то получить доступ к старому
значению можно по имени OLD.TOTAL, а к новому NEW.TOTAL.
Пример. Создать триггер, который при добавлении нового сотрудника контролирует, чтобы фамилия была написана с прописной буквы, а при приеме сотрудника
в отдел 1 увеличивает зарплату на 10%.
CREATE TRIGGER restrict_empl BEFORE insert ON employees
FOR EACH ROW
BEGIN
set new.surname = concat(upper(left(new.surname,1)), substring(new.surname, 1));
IF new.id_depart=1 THEN new.salary_hour= new.salary_hour*1.1;
END IF
END;
Пример. Написать триггер, который при удалении проекта удаляет все задания
по нему:
27
CREATE TRIGGER deltask AFTER delete ON projects
FOR EACH ROW
BEGIN
DELETE FROM tasks WHERE id_project=old.id_project;
END;
Удалить триггер позволяет оператор DROP TRIGGER, который имеет следующий синтаксис:
DROP TRIGGER tbl_name. trigger_name;
DROP TRIGGER users. restrict_ users;
Порядок выполнения работы
1. Изучить теоретические сведения по теме «Триггеры».
2. Открыть с помощью MySQueryBrowser базу данных, созданную в лабораторной работе № 1.
3. Создать для базы данных триггер:
- на событие INSERT;
- на событие UPDATE;
- на событие DELETE;
- с использованием операторов управления потоком данных.
4. Создать отчет, включив в него описание и демонстрацию работы триггеров,
ответы на контрольные вопросы.
Контрольные вопросы
1. С помощью каких операторов создаются триггеры?
2. Какие бывают виды триггеров в зависимости от события, по которому он срабатывает?
3. Какие операторы для работы с триггерами реализованы в MySQL?
4. Как вызываются триггеры?
Лабораторная работа № 6
УГРОЗЫ И ЗАЩИТА ДАННЫХ
Цель работы: сформировать знания и умения по средствам защиты данных в
СУБД MySQL, приобретение практических навыков реализации защиты базы данных в СУБД MySQL.
Краткие теоретические сведения
В состав поставки MySQL-сервера входит комплект сценариев и консольных утилит, который обладает всеми необходимыми функциями для полноценной
настройки и обслуживания сервера. Например, упомянутая выше утилита
mysqldump, а также mysqladmin, mysqlbug, myisamchk. Физическая реализация
28
MySQL включает конфигурационный файл, а также набор лог-файлов, содержащих
сведения о событиях в работе сервера.
Для администрирования сервера используется база данных mysql, входящая
в состав дистрибутивов сервера. В ее состав входят 5 таблиц, описывающие пользовательские права доступа:
user – содержит имя пользователя, пароль и привилегии.
db и host– содержит данные для определения к каким базам данных, каким
пользователям и с каких хостов разрешен доступ
tables_priv и columns_priv содержат информацию для более детального
набора привилегий. В частности можно задать привилегии для конкретной таблицы
и конкретной колонки.
Создавать пользователей в MySQL, а также предоставлять права пользователям или лишать их прав на четырех уровнях привилегий позволяют команды
GRANT и REVOKE.
Синтаксис команды GRANT:
GRANT priv_type [(column_list)] ON {tbl_name.db_name}
TO user_name [IDENTIFIED BY „password‟ ]
[WITH GRANT OPTION | MAX_QUERIES_PER_HOUR |
MAX_UPDATES_PER_HOUR | MAX_CONNECTIONS_PER_HOUR]
Синтаксис команды REVOKE:
REVOKE priv_type [(column_list)] ON {tbl_name.db_name}
FROM user_name
Список возможных значений параметра priv_type:
ALL – задает все простые привилегии, кроме WITH GRANT OPTION
ALTER – разрешает использование ALTER TABLE
CREATE – разрешает использование CREATE TABLE
CREATE TEMPORARY TABLES – Разрешает использование CREATE
TEMPORARY TABLES
DELETE – разрешает использование DELETE
DROP – разрешает использование DROP TABLE
EXECUTE – разрешает пользователю запускать хранимые процедуры
FILE – разрешает использование SELECT … INTO OUTFILE и LOAD DATA INFILE
INDEX – разрешает использование CREATE INDEX и DROP INDEX
INSERT – разрешает использование INSERT
LOCK TABLES – разрешает блокировать только те таблицы, для которых
есть привилегия SELECT
PROCESS – разрешает использование SHOW FULL PROCESSLIST
REFERENCES – зарезервировано для использования в будущем
RELOAD – разрешает использование FLUSH
REPLICATION CLIENT – предоставляет пользователю право запрашивать
местонахождение головного и подчиненных серверов
REPLICATION SLAVE – необходимо для подчиненных серверов по репликации (для чтения информации из бинарных журналов головного сервера)
SELECT – разрешает использование SELECT
29
SHOW DATABASE – разрешает выводить все базы данных
SHUTDOWN – разрешает использование mysqladmin shutdown (остановка
сервера)
SUPER – позволяет установить одно соединение (один раз), даже если достигнуто значение max_connections, и запускать команды CHANGE MASTER, KILL
thread, mysqladmin debug, PURGE MASTER LOGS и GET GLOBAL
UPDATE – разрешает использование UPDATE
USAGE – без привилегий
GRANT OPTION – синоним для WITH GRANT OPTION.
Хранимые процедуры и функции, а также триггеры хранятся в таблице proc
системной базы данных MySQL. Следует не забывать этот факт при копировании и
восстановлении баз данных.
Порядок выполнения работы
1. Изучить теоретические сведения по теме «Угрозы и защита данных».
2. Открыть с помощью MySQueryBrowser базу данных, созданную в лабораторной работе № 1.
3. Создать пользователя «cheaf» с паролем «AmIdepcheaf7@». Установить данному пользователю привилегии для работы в БД.
4. Установить, что пользователь «cheaf» может подключаться к базе данных
только из внутренней локальной сети. Проверить, чтобы в базе данных не было возможности подключения из внешней сети. В случае обнаружения такой возможности
устранить ее.
5. Изучить возможности MySQL Administrator по управлению СУБД. Пункты
меню: Startup Variables, Server Connections, Heals, ServerLogs.
6. Создать отчет, включив в него описание работы по пунктам 3 – 5, ответы на
контрольные вопросы..
Контрольные вопросы
Какие средства для управления пользователями есть в СУБД MySQL?
Что такое привилегии? Как ими управлять?
Какие средства в MySQL предназначены для управления доступом?
Какие средства в MySQL предназначены для предотвращения потери данных?
5. Какие параметры запуска сервера относятся к средствам обеспечения безопасности?
6. На основании анализа каких параметров можно сделать предположение об
организации DOS-атаки на нашу информационную систему либо о том, что
предпринята попытка кражи информации?
1.
2.
3.
4.
30
Приложение А
СТРУКТУРА БАЗЫ ДАННЫХ
Рисунок 15 – Схема базы данных
Далее приводится описание таблиц базы данных.
Таблица 1 – Таблица departments
Название
id_depart
Назначение
Идентификатор
отдела
Тип данных
INTEGER
phone
Номер телефона
VARCHAR
Ограничение
NOT NULL, AUTO_INCREMENT,
PRIMARY KEY
8
Таблица 2 – Таблица employees
Название
id_employee
surname
id_depart
salary_hour
Назначение
Идентификатор
сотрудника
Фамилия
Идентификатор
отдела
Заработная плата
в час
Тип данных
INTEGER
VARCHAR
INTEGER
Ограничение
NOT NULL, AUTO_INCREMENT,
PRIMARY KEY
15
2
INTEGER
DEFAULT NULL
31
Таблица 3 – Таблица projects
Название
id_project
Назначение
Идентификатор
проекта
Тип данных
INTEGER
project_name
Название проекта
VARCHAR
Ограничение
NOT NULL, AUTO_INCREMENT,
PRIMARY KEY
20
Таблица 4 – Таблица tasks
Название
id_task
Назначение
Идентификатор
задания
Тип данных
INTEGER
id_empl
Идентификатор
сотрудника
Идентификатор
проекта
Номер задания
внутри проекта
Дата выдачи.
Фактическая дата
сдачи.
INTEGER
Ограничение
NOT NULL, AUTO_INCREMENT,
PRIMARY KEY
NOT NULL
INTEGER
NOT NULL
id_project
task_number
date_delivery
date_turn
32
INTEGER
DATE
DATE
NOT NULL
NOT NULL
DEFAULT NULL
ЛИТЕРАТУРА
1. Кузнецов, М. В. Самоучитель MySQL 5 / М. В. Кузнецов, И. В. Симдянов. –
СПб. : БХВ-Петербург, 2006.
2. Documentation. MySQL. Oracle Corparation. [Электронный ресуср ] – 2013. Режим доступа: http://mysql.com.
33
ФОРМА ОТЧЕТА ПО ЛАБОРАТОРНЫМ РАБОТАМ
Отчет
по лабораторной работе № ___
по дисциплине_________________
студента гр _______ __________________________
Тема:_____________________________________________________________
Цель:_____________________________________________________________
Номер задания.
1. Условие задачи.
2. SQL-запрос.
3. Тестирование работы запроса (процедуры, функции, триггера).
Исходные данные
Ожидаемый результат
Ответы на контрольные вопросы.
34
Результат выполнения в
СУБД
Привести программную
форму
Download