71183

Создание базы данных для хранения информации о файловой системе

Лабораторная работа

Информатика, кибернетика и программирование

Запустив это приложение без параметров, мы имеем только права на чтение. Т.е. никаких изменений в базе данных мы сделать не можем. Это связано с тем, что при запуске этой сессии мы не передавали никаких учетных данных.

Русский

2014-11-03

430.04 KB

0 чел.

Лабораторные работы по дисциплине «Управление данными»

Лабораторной работе №3

Создание базы данных для хранения информации о файловой системе.

База данных будет создаваться с помощью СУБД MySQL. На данных компьютерах СУБД MySQL установлена как часть пакета Denwer.

1. Для того чтобы начать работу с MySQL  выполним следующую программу C:\Z\denwer\ Run.exe

Наш сервер запущен.

2.Для того чтобы нам с ним пообщаться с  MySQL  необходимо запустить следующую программу.

Z:\usr\local\mysql-5.5\bin\mysql.exe

Да это командная строка. Привыкайте. Просто дело в том, что через командную строку вы можете получить доступ везде и всегда в любой операционной системе.

Запустив это приложение без параметров, мы имеем только права на чтение. Т.е. никаких изменений в базе данных мы сделать не можем. Это связано с тем, что при запуске этой сессии мы не передавали никаких учетных данных. В нашей базе по умолчанию есть только одна учетная запись: root и пароля для нее не установлено.

3.Выполним команду показать базы данных:

show databases;

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

В ответе мы видим только служебную базу данных

  Рассмотренная нами команда не относиться к языку SQL,. т.е. в нем нет таких команд, которые бы перечислили имеющиеся базы данных или же команды, показывающие, какие таблицы находятся в базе данных. Но у MySQL такие команды есть.

4.Завершим сеанс работы командой exit;

5. Зайдем в снова в папку Z:\usr\local\mysql-5.5\bin\ но уже через командную строку или Far. Теперь пишем:

mysql.exeu root

6.Теперь мы зашли с правами администратора выполним. Заново предыдущий запрос.

Произошли некоторые изменения. Теперь нам доступны имеющиеся базы данных.

Как вы видите, нам в ответ MySql пытается нарисовать что-то вроде таблицы, но не всегда у него это получается достаточно хорошо, т.к. колонок может быть много.

7. Попробуем запрос:

select * from mysql.user;

для сложных случаев можно пользоваться специальным ключом, который ставиться вместо « ; »  а именно \G. Попробуем:

select * from mysql.user\G

8. Еще разберем случай, когда ваш запрос состоит из нескольких строчек, и вы уже стали вводить новую строчку, и заметили, что на предыдущей строке у вас есть ошибка. Отменить буфер команд можно ключом \с

9.Разберем возможность вести протокол сеанса, т.е. сохранять все ваши запросы, а также ответы сервера в файл.

Пишем \T путь_к_файлу

Например;

 \T  Z:\usr\local\mysql-5.5\log.txt

Для прекращения записи выполните команду \t

10. Теперь создадим собственную базу данных:

CREATE database Lab3;

Но если мы повторно введем такую команду, то система на нас немного поругается. Чтобы этого не происходило модно написать:

CREATE database IF NOT EXISTS Lab3;

11.Ну а теперь удалим нашу базу данных.

DROP database Lab3;

Стоит отметить, что у сервера никаких корзин нет, поэтому это безвозвратная операция. Поэтому все администраторы делятся на два типа:

  1.  те, кто делает backup
  2.  те, кто уже начал делать  backup

12. Теперь создайте еще раз базу данных Lab3 и приступим к созданию таблиц. Стоит отметить, что таблица обязательно должна принадлежать какой-то базе данных, и не может висеть в воздухе, а следовательно, и обращаться к таблице нужно через имя базы данных в которой она находится как в приведенном выше примере:

select * from mysql.user;

Но чтобы как –то сократить запись можно указать какую базу данных я буду использовать по умолчанию.

USE Lab3;

13.Чтобы отобразить имеющиеся таблицы в базе данных есть команда (напоминаю, что она не относится к SQL языку) Она отображает объекты в текущей базе данных.

Show tables;

14. Создадим таблицу в этой базе данных.

Create table filenames (

Id int,

filenames varchar(255),

ParentFolder varchar(255)

);

15. Теперь проверьте, есть ли у вас таблица?

Show tables;

16.А как узнать какие колонки в ней есть

DESC filenames;

17. Вставим первую запись в таблицу:

INSERT INTO filenames VALUES (1, ‘Вездесущее число «пи»’,1);

INSERT INTO filenames VALUES (1, ‘Зодчие XXI века (Патури Ф.)’,1);

18. Проверьте наличие этой строки в вашей таблице:

SELECT * FROM filenames;

19. Все работает. Но мы с вами в поле ID, которое хотели использовать в качестве ключа, только что записали два одинаковых значения и программа нам ничего не сказала. Мы с вами просо не указали, что хотели бы использовать этот атрибут в качестве ключа. Что же делать? Может удалить таблицу и создать заново. Выполним весь код:

DROP table filenames;

Create table filenames (

Id int PRIMARY KEY,

filenames varchar(255),

ParentFolder varchar(255)

);

20.Попробуем вставить заново

INSERT INTO filenames VALUES (1, ‘Вездесущее число «пи»’,1);

INSERT INTO filenames VALUES (1, ‘Зодчие XXI века (Патури Ф.)’,1);

Теперь при обработке последней строки мы получим ошибку. Замечательно! MySQL следит за тем, чтобы данные в атрибуте ID не повторялись.

21. Попробуем ввести в таблицу следующее значение

INSERT INTO filenames(filenames)

VALUES (‘Интриги, мошенничество, трюки.’);

А теперь еще одну 

INSERT INTO filenames(filenames)

VALUES (‘Краткий словарь парадоксальных определений’);

Но что же произошло. Разве мы ввели два одинаковых значения. Почему MySQL сказал, что мы ввели дубликат в атрибут PRIMARY KEY. Мы вообще не заполняли это поле.

22. Посмотрим, что содержит табличка:

SELECT * FROM filenames;

23. Выходит необходимо всегда передавать значение ключевого атрибута и следить за его уникальность. А можно ли это поручить самой MySQL. Конечно можно. Но для этого нужно было при создании таблицы указать для атрибута ID ключевое слово AUTO_INCREMENT. Неужели опять пересоздавать таблицу и вводить заново в нее все значения?

Помниться было у нас ключевое слово для изменения уже существующей таблицы.

ALTER TABLE filenames

DROP Id;

ALTER TABLE filenames

ADD Id int AUTO_INCREMENT PRIMARY KEY;

Ход работы

1. Создать таблицу ListCatalog в базе данных lab3 для хранения имени каталога и номера его родительской папки, описанной в этой же таблице. Ключевым атрибутом должен быть номер каталога(Catalog_ID),  он должен быть автоматически увеличивающимся при добавлении  новых записей в таблицу. Итого три поля:

Catalog_ID, Catalog_name, Catalog_parent.

Create table FolderNames (

Catalog_ID int PRIMARY KEY AUTO_INCREMENT,

Catalog_name varchar(255),

Catalog_parent int

);

Выберите для них подходящие типы данных.

2.Создайте таблицу my_files для хранения данных о файлах.

ID, f_dateModif,  f_size,  f_name,  Catalog_parent.

Внимание!!! Используйте для поля Catalog_parent тип smallint UNSIGNED

3. Найдите  две ошибки (синтаксическую и логическую) в запросе на добавление описания внешнего ключа:

ALTER TABLE my_files

  ADD CONSTRAINT fkParent

  FOREIGN KEY Catalog_parent

  REFERENCES ListCatalog(Catalog_ID);

4. Проверьте работоспособность созданного ограничения:

INSERT INTO ListCatalog(Catalog_name, Catalog_parent)

VALUES ('Книги',0);

INSERT INTO ListCatalog(Catalog_name, Catalog_parent)

VALUES ('Бизнес',1);

INSERT INTO my_files(f_dateModif, f_size, f_name, Catalog_parent)

VALUES ('2006-03-13 18:53:00 ',2307284,'Вездесущее число <пи>.djvu',1);

INSERT INTO my_files(f_dateModif, f_size, f_name, Catalog_parent)

VALUES ('2013-01-07 02:17:00 ',125400681,'CD.zip',4);

5. Если вы наблюдаете ошибку при добавлении последний записи, то все работает.

Выведите с помощью запроса на экран все, что находиться в таблице ListCatalog, а затем в таблице  my_files

6. Теперь из таблицы my_files удалите внешний ключ и все имеющиеся записи.

Удаление ключа производим так:

ALTER TABLE  my_files  

 DROP FOREIGN KEY fkParent;

Удаление всех записей из таблицы можно сделать так:

DELETE  FROM my_files  ;

Проверьте теперь правильность выполнения запроса, т.е выведите все записи которые есть в таблице my_files .

7.Таблицу ListCatalog удалите и создайте заново (примечание: не забудьте про AUTO_INCREMENT   PRIMARY KEY).

8.Вставьте данные из файлов list_SQL_folder.txt  и list_SQL_file.txt.

9. Проверьте корректность данных.

9.1.У вас должно быть 307 папок и  4680 файлов. (проверьте запросом выводящим количество записей)

9.2. В поле my_files.Catalog_parent не должно ссылаться на несуществующий каталог. Т.е. как минимум иметь число больше, чем максимальное  ListCatalog. Catalog_ID

Максимальное число  в ListCatalog. Catalog_ID я могу найти следующим запросом:

SELECT MAX(Catalog_ID) FROM ListCatalog;

Напишите аналогичный запрос для поиска максимального значения в поле my_files.Catalog_parent.

Сравните два полученных числа.

10. Таким образом, мы выявили несоответствие. Узнайте, сколько записей не соответствует этому правилу.

SELECT COUNT(*)

  FROM my_files a

   WHERE a.Catalog_parent> 279;

11. А теперь давайте представим, что у вас таких 20 пар таких таблиц и вам каждый месяц приходится проверять, сколько записей о фалах в них не корректно.

Можно ли написать запрос более универсальным способом? –Да.

  SELECT COUNT(*)

  FROM my_files a,

             (SELECT MAX(Catalog_ID) c

                FROM ListCatalog   ) b

   WHERE a.Catalog_parent> b.c;

Объясните, как работает этот запрос.

12. Преобразуйте этот запрос так, чтобы он выдавал названия только 5 книг (для этого используйте оператор - LIMIT 5; поставьте его самым последним за блоком WHERE ). Для улучшения читаемости ответа попробуйте выводить из названия книги только 70 символов (для этого воспользуйтесь функцией substring (строка, позиция,  длина) описать её необходимо в операторе SELECT).

13. Теперь наша задача приписать файлы с недействительными каталогами в папку с названием Err.Folder. При этом сначала необходимо проверить наличие описания этой папки в таблице ListCatalog, при этом её родителем должен служить каталог с Catalog_ID=0 (т.е. Catalog_name=’Err.Folder’, Catalog_parent=0), и если её нет, то тогда создаем запись об этой папке.

13.1.  Напишите запрос, выдающий Catalog_ID  папки Err.Folder, если она есть.

 select Catalog_ID

  from ListCatalog

  WHERE Catalog_name='Err.Folder';

13.2.  Напишите запрос для вставки в таблицу ListCatalog запись о папке 'Err.Folder'

select if ((select count(*) From ListCatalog where Catalog_name=’Err.Folder’ )=0 ,

             (select 'No exists'), 15) ;

  INSERT INTO ListCatalog(Catalog_name, Catalog_parent)

   VALUES (’Err.Folder’,0);

13.3.  Модифицируем записи в таблице my_files.

UPDATE имя_таблицы

SET имя_столбца1=выражение1

WHERE определение_where

UPDATE my_files a,

             (SELECT MAX(Catalog_ID) c

                FROM ListCatalog   ) b

SET Catalog_parent= 280   

   WHERE a.Catalog_parent> b.c;

Переделайте запрос из п.11. для модификации записей.

14. Сколько файлов и папок в папке Гуманитарные

15. Выведите название всех папок, которые содержат 5 или более  вложенных в себя папок.

select Catalog_name

  from ListCatalog a, (select Catalog_parent, count(Catalog_parent) c

                       from ListCatalog

      group by Catalog_parent) b

  where b.c>5 and a.Catalog_ID=b.Catalog_parent;

16.Сколько файлов в папке Информатика.   select count(*)

  from  my_files a 

  where  a.Catalog_parent=  (select Catalog_ID

                         from ListCatalog 

                           Where Catalog_name='Гуманитарные')\G

17.Выведите имена папок находящихся в папке ‘Химия’

 ( select Catalog_name

  from  ListCatalog a

  where  a.Catalog_parent=  (select Catalog_ID

                         from ListCatalog

                           Where Catalog_name=’Химия’)

18. Выведите имена папок находящихся во втором уровне вложенности в папке ‘Химия’

Create table ListCatalog(

Catalog_ID smallint UNSIGNED  AUTO_INCREMENT PRIMARY KEY,

Catalog_name varchar(255),

Catalog_parent smallint UNSIGNED

);

Create table my_files (

 Id int  AUTO_INCREMENT PRIMARY KEY,

 f_dateModif DATETIME,

 f_size  int UNSIGNED,

 f_name varchar(255),

 Catalog_parent  smallint UNSIGNED

);

 select Catalog_name

  from ListCatalog a, (select Catalog_parent, count(Catalog_parent) c

                       from ListCatalog 

      group by Catalog_parent) b

  where b.c>5 and a.Catalog_ID=b.Catalog_parent;


 

А также другие работы, которые могут Вас заинтересовать

33664. ПРОТОКОЛ SSH. АРХИТЕКТУРА 50 KB
  ПРОТОКОЛ SSH. Протокол SSH Secure Shell безопасная оболочка чаще всего используется для создания безопасной оболочки для доступа к другим хостам и передачи файлов по сети для безопасности аутентификации и для обеспечения конфиденциальности данных. SSH поддерживается мощное шифрование и продвинутые методы идентификации пользователей которые прошли проверку временем. Часто SSH используют для удаленного управления напр Telnet.
33665. Проблемы безопасности протоколов прикладного уровня 39 KB
  Проблемы безопасности протоколов прикладного уровня Прикладной уровень в семействе TCP IP представлен следующими службами: Служба разрешения имён DNS. Для защиты DNS существуют два направления: переход на защищённый протокол DNSSec; разделение пространства имён с целью сокрытия внутреннего пространства имён от внешнего мира. Разделение пространства имён. В то же время для внешнего пользователя достаточно иметь доступ только к небольшой части внутреннего пространства имён.
33666. Реализация корпоративной службы DNS 499.5 KB
  Реализация корпоративной службы DNS При традиционной схеме реализации корпоративной службы DNS вся информация о домене организации размещена на первичном сервере и доступна любому желающему рис. Даже если принять какието меры по защите первичного сервера есть ещё вторичный сервер расположенный у провайдера.8 Один из вариантов решения двухсерверная конфигурация рис. Двухсерверная конфигурация Рис.
33667. МОДЕЛЬ БЕЗОПАСНОСТИ ОС WINDOWS В СЕТИ. КОМПОНЕНТЫ БЕЗОПАСНОСТИ. УЧЕТНЫЕ ЗАПИСИ 69 KB
  МОДЕЛЬ БЕЗОПАСНОСТИ ОС WINDOWS В СЕТИ. КОМПОНЕНТЫ БЕЗОПАСНОСТИ. Существующие разнообразные сетевых операционные системы поразному подходят к построению системы безопасности. Операционная система Windows Server 2003 согласно заверениям Microsoft соответствует классу безопасности С2.
33668. РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЕЙ. ПРАВА ПОЛЬЗОВАТЕЛЕЙ. ОБЪЕКТЫ ДОСТУПА. ПОЛУЧЕНИЕ ДОСТУПА 47.5 KB
  РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЕЙ. ПРАВА ПОЛЬЗОВАТЕЛЕЙ. Группы исп для объединения пользователей с одинаковой потребностью в доступе к определенным объектам системы. Права пользователей user rights.
33669. ПОЛЬЗОВАТЕЛЬСКИЕ ПАРОЛИ. ОС WINDOWS В СЕТИ. ПАРОЛИ. ПРАВА ПОЛЬЗОВАТЕЛЕЙ 41 KB
  Опознавание достигается за счет проверки того что у пользователя осуществляющего доступ к серверу имеется секретный пароль который уже известен серверу. В ответ сервер посылает пользователю запрос вызов состоящий из идентифицирующего кода случайного числа и имени узла сервера или имени пользователя. При этом пользовательское оборудование в результате запроса пароля пользователя отвечает следующим ответом зашифрованным с помощью алгоритма одностороннего хеширования наиболее распространенным видом которого является MD5. После получения...
33670. МОДЕЛЬ БЕЗОПАСНОСТИ СУБД MS SQL. РЕЖИМЫ И ТАБЛИЦЫ ПРОВЕРКИ ПРАВ 114.5 KB
  МОДЕЛЬ БЕЗОПАСНОСТИ СУБД MS SQL. В инф сист 2 уровня защиты данных: ур приложения и ур БД 3 основных механизма разграничения доступа: Для создания учетных записей пользователя можно воспользоваться языком SQL и утилитой командной строки SQL Plus для Orclе. В MS SQL для добавления учётных записей вы можете использовать SQL Enterprise Mnger или системную процедуру sp_ddlogin. По умолчанию доступом к SQL Serverу пользуются администраторы BUILDIN dministrtors и s.
33672. ПОНЯТИЕ, ЗНАЧЕНИЕ И ВИДЫ ВЗАИМОДЕЙСТВИЯ СЛЕДОВАТЕЛЯ С ДРУГИМИ ПРАВООХРАНИТЕЛЬНЫМИ ОРГАНАМИ И ОБЩЕСТВЕННОСТЬЮ 12.43 KB
  Формы взаимодействия: 1 процессуальное регламентированное законодательством которое дает право следователю давать письменные указания органу дознания: а о проведении оперативноразыскных мероприятий; б о производстве отдельных следственных действий; в об исполнении постановлений о задержании приводе аресте; г о производстве иных процессуальных действий а также дающие возможность получать содействие при их осуществлении; 2 организационное выработанное практикой и регламентированное подзаконными актами: а направление следователю...