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;


 

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

28546. О возможности реализации абсолютной секретности в постановке Шеннона 58.5 KB
  А это в свою очередь может повлиять на выбор противником своих действий и таким образом совершенной секретности не получится. Следовательно приведенное определение неизбежным образом следует из нашего интуитивного представления о совершенной секретности. Для совершенной секретности системы величины PEM и PM должны быть равны для всех E и M.
28548. Режим ECB 31 KB
  ECBрежим идеален для небольшого количества данных например для шифрования ключа сессии. Режим шифрования Электронная Кодовая Книга ECB Под режимом шифрования здесь понимается такой алгоритм применения блочного шифра который при отправке сообщения позволяет преобразовывать открытый текст в шифротекст а после передачи этого шифротекста по открытому каналу позволяет однозначно восстановить первоначальный открытый текст. Как видно из определения сам блочный шифр теперь является лишь частью другого алгоритма – алгоритма режима шифрования....
28549. Режим CBC 39 KB
  Дешифрование в режиме СВС Для получения первого блока зашифрованного сообщения используется инициализационный вектор IV для которого выполняется операция XOR с первым блоком незашифрованного сообщения. В режиме CBC при зашифровании каждая итерация алгоритма зависит от результата предыдущей итерации поэтому зашифрование сообщения не поддаётся расспараллеливанию. Однако расшифрование когда весь шифротекст уже получен можно выполнять параллельно и независимо для всех блоков сообщения см. Это дает значительный выигрыш во времени при...
28550. Режим CFB 66.5 KB
  Как и в режиме CBC здесь используется операция XOR для предыдущего блока зашифрованного текста и следующего блока незашифрованного текста. Таким образом любой блок зашифрованного текста является функцией от всего предыдущего незашифрованного текста. Для левых J битов выхода алгоритма выполняется операция XOR с первыми J битами незашифрованного текста Р1 для получения первого блока зашифрованного текста С1. При дешифровании используется аналогичная схема за исключением того что для блока получаемого зашифрованного текста выполняется...
28551. Режим шифрования с обратной связью по выходу (OFB) 52.55 KB
  Разница заключается в том что выход алгоритма в режиме OFB подается обратно в регистр тогда как в режиме CFB в регистр подается результат применения операции XOR к незашифрованному блоку и результату алгоритма см. Шифрование в режиме OFB Основное преимущество режима OFB состоит в том что если при передаче произошла ошибка то она не распространяется на следующие зашифрованные блоки и тем самым сохраняется возможность дешифрования последующих блоков. Дешифрование в режиме OFB Недостаток режима OFB заключается в том что он более уязвим к...
28552. Симметричные методы шифрования DES 63.46 KB
  Функция перестановки одна и та же для каждого раунда но подключи Ki для каждого раунда получаются разные вследствие повторяющегося сдвига битов ключа. Последовательность преобразований отдельного раунда Теперь рассмотрим последовательность преобразований используемую на каждом раунде. Создание подключей Ключ для отдельного раунда Ki состоит из 48 битов. На каждом раунде Ci и Di независимо циклически сдвигаются влево на 1 или 2 бита в зависимости от номера раунда.
28553. Примеры современных шифров проблема последнего блока DES 26.44 KB
  Альтернативой DES можно считать тройной DES IDEA а также алгоритм Rijndael принятый в качестве нового стандарта на алгоритмы симметричного шифрования. Также без ответа пока остается вопрос возможен ли криптоанализ с использованием существующих характеристик алгоритма DES. Алгоритм тройной DES В настоящее время основным недостатком DES считается маленькая длина ключа поэтому уже давно начали разрабатываться различные альтернативы этому алгоритму шифрования.