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;


 

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

53013. Український пісенний фольклор як джерело народознавства 580 KB
  Особливу роль в посібнику приділяється тому щоб привернути увагу та шанобливе ставлення учнів до української пісні. Урок №1 Пісня як джерело народознавства: а виникнення народної пісні; б пісенна творчість українського народу; в пісня жанр народної творчості; г родинно побутові пісні; д важливість фольклорних творів; е усна народна творчість; є українська народна пісня; ж пісня голос душі; з пісенна етнологія частина народознавства; і додатки до уроку №1. Урок №3 Народний потенціал забавлянок та дитячих пісень:...
53014. Food. Здорова їжа 94 KB
  Good morning everyone! I’m glad to see you. How are you? Ps: Good morning teacher! We are glad to see you, too. We are fine, thank you. Повідомлення теми та мети уроку. T: During our lesson today we will speak about food. We will discuss healthy and unhealthy food and your likes and dislikes in your eating habits.
53015. Food. Cooking traditions. Table manners 54 KB
  T: Today we’ll revise vocabulary on the topic, make up dialogues, listen to the text, sing a song, visit TV show and even take part in it. T: Well, let’s get into English language spirit. Listen and repeat after me: A good cook never cooks while looking into a cookery book. After dinner sleep a while, after supper walk a mile.
53016. Їжа та напої 43 KB
  Will you translate it? So by the end of our lesson you should be able to speak about right or healthy food, to use vocabulary on the topic in your speech, to give advice for everybody how to be healthy. Also we’ll review some grammar rules connected with countable and uncountable nouns. To begin with I’d like you to start from the sounds. At first let’s train our tongues.
53017. Food traditions in different parts of the world 199.5 KB
  Привітання Повідомлення теми та мети уроку Tody we re going to spek bout food trditions in different prts of the world. Who is on duty tody записати число в зошити nd now get redy with your tongues to prctice sounds: wht sound is it: fried rice spicy to slice [i] показати на дошці to stir to serve to burn herb [з:] показати на дошці to chop cheese chicken crunchy chewy [t∫] Перевірка домашнього завдання Helthy food Unhelthy food You see list of foods nd your tsk is to sort them ccording to the tble робота в...
53018. Healthy food 136 KB
  The topic of our lesson is Healthy food. We must speak about food we like to eat, must explain about Healthy and Unhealthy food. At the end of the lesson we’ll answer the question “What kind of food people must to eat that to be healthy?”
53019. FOOD AND DRINKS 8.74 MB
  Good morning, children! I’m glad to see you. I think you’re well. I hope we’ll have a wonderful time together. Let’s begin our lesson. Today we are going to work at the topic “Food and Drinks”. You’ll learn new words and find out what food we must eat to be healthy, how to make your healthy diet and speak about the right food, our habits of eating.
53020. Щоденне меню 40 KB
  And at this lesson we’ll discuss daily menu of British and Ukrainian people, try to make your own menu and revise grammar material: conditional of the second type.
53021. Health Foods 62.5 KB
  Yesterday afternoon in a village near Bristol, a tall old man with a good suntan celebrated his birthday with some friends. After a party he played tennis and then went for a five mile walk with some of his guests. There was nothing unusual in this. The man, whose name was Mr. Misha Weibold has been celebrating his birthday in this way for a long time. The only unusual thing is that Mr.Weibold was 85 years old yesterday.