Advertisement
Guest User

Untitled

a guest
May 20th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.74 KB | None | 0 0
  1. Laboratorium 4 (Administracja MySQL), 07.05.2018
  2. Marek Szymański, Jakub Legutko
  3.  
  4. 5. Przegladanie bazy danych Serwer C:\Users\lab\Desktop\sql-tools\server\bin
  5. mysql -u root -p --port 6033
  6.  
  7. b) USE uczelnia;
  8. Database changed
  9. c) DESCRIBE przydzialy;
  10. 3 rows in set (0.00 sec)
  11. // opisuje tabele przydzialy - pokazuje jakie typy przechowuje, klucz, dane, wartosci domyslne
  12. d) select * from przydzialy;
  13. 243 rows in set (0.00 sec)
  14. //wyswietla zawartosc tabeli
  15.  
  16. 6.
  17. a) mysqladmin -u root -p --port 6033 password root_sql;
  18. //komende nalezy wykonac na wylogowanym koncie
  19.  
  20. b) mysql -u root -p --port 6033
  21. //W Enter password:root_sql
  22.  
  23. c)
  24. i.) show databases;
  25.  
  26. mysql> +--------------------+
  27. -> | Database |
  28. -> +--------------------+
  29. -> | information_schema |
  30. -> | mysql |
  31. -> | uczelnia |
  32. -> | university |
  33. -> +--------------------+
  34. -> 4 rows in set (0.00 sec)
  35. //wyswietla dostepne bazy na serwerze
  36.  
  37. ii.) show processlist;
  38. //pokazuje liste procesow
  39. +----+------+-----------------+------+---------+------+-------+------------------+
  40. | Id | User | Host | db | Command | Time | State | Info |
  41. +----+------+-----------------+------+---------+------+-------+------------------+
  42. | 3 | root | localhost:54045 | NULL | Query | 0 | NULL | show processlist |
  43. +----+------+-----------------+------+---------+------+-------+------------------+
  44. 1 row in set (0.00 sec)
  45.  
  46. iii.) use labbd;
  47. ERROR 1049 (42000): Unknown database 'labbd'
  48. //zwrocono blad, gdyz nie ma takiej bazy w serwerze (patrz punkt [6c i.])
  49.  
  50. iv.) show create table pracownicy;
  51. (W PRZYPADKU LABBD)
  52. ERROR 1046 (3D000): No database selected
  53. //zwrocono blad, gdyz nie wybrano bazy na ktorej ma zostac utworzona tabela pracownicy
  54.  
  55. d) opisany przy wywolywaniu punktow
  56.  
  57. e) CREATE DATABASE labbd;
  58. //Query OK, 1 row affected (0.00 sec), utworzono baze danych labbd
  59.  
  60. mysql> USE labbd;
  61. //Database changed
  62.  
  63. mysql> \. C:\Users\lab\Desktop\sql-tools\server\bin\labbd.sql
  64. //utworzono obiekty za pomoca pliku labbd.sql
  65.  
  66. f) show tables from labbd;
  67. +------------------+
  68. | Tables_in_labbd |
  69. +------------------+
  70. | funkcje |
  71. | instytuty |
  72. | kierunki |
  73. | oceny |
  74. | pracownicy |
  75. | przedmioty |
  76. | przydzialy |
  77. | rozklady |
  78. | sale |
  79. | studenci |
  80. | tematy |
  81. | typy_przedmiotow |
  82. | wyplaty |
  83. | zespoly |
  84. +------------------+
  85. 14 rows in set (0.00 sec)
  86. //wyswietlono liste tabel w bazie labbd
  87.  
  88. show columns from funkcje;
  89. +---------------+----------+------+-----+---------+-------+
  90. | Field | Type | Null | Key | Default | Extra |
  91. +---------------+----------+------+-----+---------+-------+
  92. | KOD_FUNKCJI | char(3) | NO | | NULL | |
  93. | NAZWA_FUNKCJI | char(30) | NO | | NULL | |
  94. +---------------+----------+------+-----+---------+-------+
  95. 2 rows in set (0.00 sec)
  96. //wyswietlono kolumny z tabeli, ich typ, klucz i wartosc domyslna
  97.  
  98. ============================================================================
  99. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  100. II. OPERACJE NA BAZIE DANYCH
  101. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  102. ============================================================================
  103. 1. Ładowanie danych
  104. a) mysql> CREATE DATABASE Lab_sql;
  105. b) mysql> \. C:\Users\lab\Desktop\sql-tools\lab_mysql_2011\crcasdat.sql
  106. c) mysql> \. C:\Users\lab\Desktop\sql-tools\lab_mysql_2011\casdat_dump.sql
  107. d) Ładowanie danych okreslono za pomoca dwoch dodatkowych zmiennych do przechowywania sekund,
  108. na podstawie roznicy czasu pomiedzy rozpoczeciem a zakonczeniem ladowania pliku wyznaczono jego, który wynosił 32 sekundy.
  109. e) mysql> select * from casdat into outfile 'casdat.dump';
  110. Query OK, 76211 rows affected (0.07 sec)
  111. //utworzono plik wyjsciowy casdat.dump w folderze glownym bazy
  112. f) mysql> truncate casdat;
  113. Query OK, 0 rows affected (0.00 sec)
  114. g) mysql> load data infile 'casdat.dump' into table casdat
  115. Query OK, 76211 rows affected (0.12 sec)
  116. Records: 76211 Deleted: 0 Skipped: 0 Warnings: 0
  117.  
  118. h) Wszystkie kroki przebiegły prawidłowo, kasowanie rekordów trwa praktycznie natychmiastowo, natomiast ich ładowanie zajmuje już więcej czasu.
  119.  
  120. 2. Typy wyliczeniowe
  121.  
  122. a)
  123. mysql> use Lab_sql;
  124. Database changed
  125.  
  126. create table dyzury(
  127. ido int,
  128. dzien ENUM ('poniedzialek','wtorek','sroda','czwartek','piatek','sobota','niedziela'));
  129. //Query OK, 0 rows affected (0.01 sec)
  130.  
  131. b)
  132. mysql> insert into dyzury values (2,'wtorek');
  133. Query OK, 1 row affected (0.00 sec)
  134.  
  135. mysql> insert into dyzury values (5,'sroda');
  136. Query OK, 1 row affected (0.00 sec)
  137.  
  138. mysql> insert into dyzury values (6,'brakdnia');
  139. Query OK, 1 row affected, 1 warning (0.00 sec)
  140.  
  141. //WYNIK:
  142. mysql> select * from dyzury;
  143. +------+--------+
  144. | ido | dzien |
  145. +------+--------+
  146. | 2 | wtorek |
  147. | 5 | sroda |
  148. | 6 | |
  149. +------+--------+
  150. 3 rows in set (0.00 sec)
  151.  
  152. c)mysql> insert into dyzury (dzien) values ('wtorek,sroda');
  153. Query OK, 1 row affected, 1 warning (0.00 sec)
  154.  
  155. d)mysql> insert into dyzury values (5,5);
  156. Query OK, 1 row affected (0.00 sec)
  157.  
  158. e)//WYNIK:
  159. mysql> select * from dyzury;
  160. +------+--------+
  161. | ido | dzien |
  162. +------+--------+
  163. | 2 | wtorek |
  164. | 5 | sroda |
  165. | 6 | |
  166. | NULL | |
  167. | 5 | piatek |
  168. +------+--------+
  169. 5 rows in set (0.00 sec)
  170.  
  171. f) utworzenie tabeli dyzury z kolumna dzien poprzez enum pozwala wprowadzac dzien za pomoca cyfry co widzimy w podpunkcie d, wszystkie komendy wykonano pomyslnie.
  172. Z powodu reprezentacji wyliczeniowej po wykonaniu punktu c, nie dodano dnia (wtorek,środa). Aby dodać tę wartość należałoby kolumnę dzień przedstawiać w postaci binarnej (SET zamiast ENUM)
  173. Co udowadnia, że działanie komend jest zgodne z informacjami zamieszczonymi na stronie z dokumentacją dev.mysql.com
  174.  
  175. g)
  176. create table dyzury_set(
  177. ido int,
  178. dzien SET ('poniedzialek','wtorek','sroda','czwartek','piatek','sobota','niedziela'));
  179. //Query OK, 0 rows affected (0.04 sec)
  180.  
  181. h)
  182. mysql> insert into dyzury_set (dzien) values ('wtorek,sroda');
  183. Query OK, 1 row affected (0.00 sec)
  184.  
  185. mysql> insert into dyzury_set values (5,5);
  186. Query OK, 1 row affected (0.00 sec)
  187.  
  188. mysql> select * from dyzury_set;
  189. +------+--------------------+
  190. | ido | dzien |
  191. +------+--------------------+
  192. | NULL | wtorek,sroda |
  193. | 5 | poniedzialek,sroda |
  194. +------+--------------------+
  195. 2 rows in set (0.00 sec)
  196.  
  197. i)
  198. mysql> insert into dyzury_set values (13,'poniedzialek,aaa');
  199. Query OK, 1 row affected, 1 warning (0.00 sec)
  200.  
  201. j)
  202. mysql> select * from dyzury_set;
  203. +------+--------------------+
  204. | ido | dzien |
  205. +------+--------------------+
  206. | NULL | wtorek,sroda |
  207. | 5 | poniedzialek,sroda |
  208. | 13 | poniedzialek |
  209. +------+--------------------+
  210. 3 rows in set (0.00 sec)
  211.  
  212. k) update dyzury_set set dzien='sobota' where find_in_set('wtorek', dzien);
  213. //Query OK, 1 row affected (0.00 sec)
  214. //Rows matched: 1 Changed: 1 Warnings: 0
  215.  
  216. PRZED ZMIANĄ:
  217. mysql> select * from dyzury_set;
  218. +------+--------------------+
  219. | ido | dzien |
  220. +------+--------------------+
  221. | NULL | wtorek,sroda |
  222. | 5 | poniedzialek,sroda |
  223. | 13 | poniedzialek |
  224. +------+--------------------+
  225. 3 rows in set (0.00 sec)
  226.  
  227. PO ZMIANIE:
  228. mysql> select * from dyzury_set;
  229. +------+--------------------+
  230. | ido | dzien |
  231. +------+--------------------+
  232. | NULL | sobota |
  233. | 5 | poniedzialek,sroda |
  234. | 13 | poniedzialek |
  235. +------+--------------------+
  236. 3 rows in set (0.00 sec)
  237.  
  238. i) Wykonanie komendy insert into dyzury_set values (5,5), spowodowało wpisanie do kolumny dni poniedzialek,sroda - co jest poprawne, gdyż teraz dni są numerowane binarnie więc 5 binarnie to (101) - pierwszy z prawej to poniedziałek (1), drugi wtorek(0) [dlatego nie wpisany], trzeci środa(1), i pozostałe dni również mają wartość 0 dlatego nie były wpisane.
  239. Podpunkt c, został w tym przypadku wykonany i dodany do tabeli poprawnie ze względu na reprezentację kolumny dzien w postaci binarnej (teraz SET zamiast ENUM)
  240. Co udowadnia, że działanie komend jest zgodne z informacjami zamieszczonymi na stronie z dokumentacją dev.mysql.com
  241. ============================================================================
  242. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  243. III. Silniki (storage engine)
  244. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  245. ============================================================================
  246. 1.
  247. mysql> use labbd;
  248. mysql> SHOW TABLE STATUS WHERE NAME='dyzury';
  249. //1 row in set (0.00 sec)
  250. //zwrocono wykorzystywany silnik: MyISAM
  251.  
  252. 2.
  253. Pliki tworzone dla kazdej tablicy:
  254. - *.frm
  255. - *.MYD
  256. - *.MYI
  257.  
  258. 3.
  259. mysql> ALTER TABLE studenci ENGINE=InnoDB;
  260. Query OK, 66 rows affected (0.14 sec)
  261. Records: 66 Duplicates: 0 Warnings: 0
  262.  
  263. 4. Pliki zmieniły się, istnieje teraz tylko jeden plik: studenci.frm, nie ma plików o rozszerzeniu MYD i MYI
  264.  
  265. 5.
  266. ============================
  267. DLA MyISAM
  268. ============================
  269. // zmienilo plec
  270.  
  271. ============================
  272. DLA InnoDB
  273. ============================
  274. // zmienilo plec
  275.  
  276. 6. //W obu jest teraz plec K
  277.  
  278. 7.,8. Polecenie rollback zadziałało tylko dla InnoDB i ustawiło płeć z powrotem na M
  279.  
  280. 9. rollback;
  281. //brak dodatkowych zmian
  282.  
  283. 10.
  284. mysql> ALTER TABLE studenci ENGINE=Memory;
  285. Query OK, 66 rows affected (0.07 sec)
  286. Records: 66 Duplicates: 0 Warnings: 0
  287.  
  288. 11. Silnik Memory nie obsługuje transakcji, sprawdziliśmy to poprzez wpisanie wcześniejszych operacji dla poprzednich silników, rollback nie działa dla tego silnika.
  289.  
  290. 12.,13. Po restartcie tabela wyczyściła się - brak rekordu
  291.  
  292. ============================================================================
  293. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  294. IV. Optymalizacja zapytań
  295. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  296. ============================================================================
  297. 1.
  298. //kasowanie rekordow
  299. mysql> truncate casdat;
  300. Query OK, 0 rows affected (0.02 sec)
  301.  
  302. //zaladowanie danych
  303. mysql> load data infile 'casdat_z1.dump' into table casdat;
  304. Query OK, 4821 rows affected (0.02 sec)
  305. Records: 4821 Deleted: 0 Skipped: 0 Warnings: 0
  306.  
  307. Rozwiązanie 1:
  308. //WYNIK: 115 rows in set (1.90 sec)
  309.  
  310. Rozwiązanie 2:
  311. //WYNIK: 101 rows in set (0.05 sec)
  312.  
  313. 3. Zapytanie 2 wykonuje się znacznie szybciej, powodem jest brak zagniezdzonego polecenia select, dodatkowo rozwiazanie drugie wykorzystuje polecenie join.
  314.  
  315. 4. create index cas2 on casdat(cas)
  316. Rozwiązanie 1:
  317. //WYNIK: 115 rows in set (0.02 sec)
  318.  
  319. Rozwiązanie 2:
  320. //WYNIK: 101 rows in set (0.06 sec)
  321.  
  322. 5. Czas wykonania poprzez rozwiązanie 1 znacznie się skrócił, jest szybsze od rozwiązania 2. Rozwiązanie 2 wydłużyło się nieznacznie bo o 0.01 niż poprzednio, możemy więc stwierdzić, że rozwiązanie 2 wykonywało się podobnie w obu przypadkach. Natomiast Rozwiązanie 1 zadziałało znacznie szybciej po założeniu indeksu.
  323.  
  324. 6. Rozwiązanie 2 zwróciło mniej oddczynników niż pierwsze - jak widzimy rozwiązanie to wykorzystuje złączenie co powoduje, że część wyników zostaje również odrzucona po dokonaniu tego złączenia.
  325.  
  326. 7. Liczba pomijanych odczynników jest równa 14. Do uzyskania identycznych odczynników należy nastepująco zmodyfikować rozwiązanie:
  327. select c1.cas from
  328. casdat c1 left join casdat c2 on c1.cas=c2.cas and c2.type='rent'
  329. where c1.type='sent'
  330. group by c1.cas
  331. having count(distinct c1.data)>count(distinct c2.data);
  332.  
  333. 8. z indeksem
  334. //WYNIK: 115 rows in set (0.01 sec)
  335.  
  336. bez indeksu
  337. //WYNIK: 115 rows in set (11.26 sec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement