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;


 

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

50124. Конструювання загальнорозвивальних вправ. Визначення вихiдних положень 52 KB
  Лазіння у змішаному висі та упорі лазіння у простому висі. Класифікація вправ у лазінні Вправи у лазінні розділяються на пять груп: лазіння у змішаному висі та упорі у простому висі та упорі перелізання лазіння із зупинками лазіння з партнером див. Способи лазіння по нижній стороні драбини: у висі одноїменним і різноіменним способом; у висі на зігнутих ногах поперек і уздовж; у висі на пятах; за допомогою рук і однієї ноги. Методика навчання лазінню у змішаному висі та упорі.
50126. Создание анимационного ролика в программе Adobe Flash 638.5 KB
  Анимация достигается различным путем в простейшем случае изменением характеристик объектов во времени в так называемых ключевых кадрах. Промежуточные кадры могут произвольно вставляться между ключевыми. Положение в каждом из промежуточных кадров рассчитывается как экстраполяция между ключевыми кадрами. Новым элементом является Временная шкала Timeline справа вверху она предназначена для покадрового монтажа фильма.
50127. Методи послідовного пошуку екстремуму у критеріальному моделюванні 630.34 KB
  Крім того, критеріальний метод має важливе методологічне значення в процесі дослідження. Він надає техніко-економічному аналізу оптимальних рішень узагальнювальний характер і дозволяє більш раціонально використовувати вихідну інформацію...
50128. Визначення горизонтальної й вертикальної складових індукції магнітного поля Землі за допомогою земного індуктора 176 KB
  Визначення горизонтальної й вертикальної складових індукції магнітного поля Землі за допомогою земного індуктора. Вертикальну площину в якій лежить вектор а отже й вісь магнітної стрілки називають площиною магнітного меридіану. Прилад під'єднаний до затискачів мілівеберметр або балістичний гальванометр можна проградуювати так щоб він безпосередньо показував зміну магнітного потоку який пронизує витки індуктора. Нехай вісь індуктора орієнтована горизонтально в площині магнітного меридіана площина витків теж горизонтальна.
50129. Исследование процессов накопления и релаксации заряда в диэлектрических материалах 1.32 MB
  Определение постоянной времени RCцепи. Даже если цепь не содержит конденсаторов всегда присутствует электрическая емкость изоляции и в ней возникают токи смещения обусловленные изменением электрического поля во времени. В цепях постоянного тока распределение электрических зарядов на проводниках и токов на участках цепи стационарно то есть неизменно во времени. Если на какомто участке цепи происходят изменения силы тока или напряжения то другие участки цепи могут почувствовать эти изменения только через некоторое время которое по...
50130. Определение коэффициента термического расширения (объемного) жидкости 116 KB
  Цель работы: 1 измерить изменение объема воды при нагреве ее от 0 С до 90 С; 2 определить показатель коэффициента термического расширения. Особенный интерес представляет поведение воды в диапазоне температур 0 10 С. В данной работе исследуется изменение объема воды в диапазоне температур от 0 С до 40 90 С максимальная температура ограничена длиной измерительной трубки. Для проведения измерений в интервале 0 20 С термостат в начале работы заполняется смесью льда и воды что обеспечивает начальную температуру 0 С.
50131. ОПРЕДЕЛЕНИЕ ПОКАЗАТЕЛЯ ПРЕЛОМЛЕНИЯ ПЛОСКОПАРАЛЛЕЛЬНОЙ ПЛАСТИНЫ С ПОМОЩЬЮ МИКРОСКОПА 160 KB
  Углы падения отражения и преломления отсчитываются от нормали к границе раздела двух сред ON. Направления этих лучей определяются следующими законами геометрической оптики: луч падающий АО луч отраженный ОВ луч преломленный ОД и нормальON восстановленная в точке падения О лежат в одной плоскости; угол отражения NOB численно равен углу падения ON; синус угла падения i относится к синусу угла преломления r как скоростьсвета в первой среде υ1 относится к скорости света во второй среде υ2. 1 Последний закон в оптике известен как...