1
MySQL podstawowe cechy: system zarzdzania bazami danych relacyjna baza danych; dane zapamitywane w osobnych tabelach, a nie w jednej duej tabeli licencja typu open source - General Public License (GPL) konfiguracja serwer klienci wydajny w porównaniu z innymi DBMS (miliony rekordów, lub dziesitki tysicy tabel); maksymalny rozmiar tabel liczony w setki GB (zalene od platformy); wstawienie 36000 rekordów po 20 pól trwa ok. 2 sekundy (MS-Access to samo ok. 5-6 sek.) napisany w C/C++; dla wielu platform; API dla licznych jzyków wielowtkowe jdro; moliwo uycie wielu CPU sortowanie wg. opcji narodowych róne wersje jdra: ze ledzeniem, optymalizowana, dla NT/2000/XP, uywajca named pipes 2
Załadowanie MySQL: http://www.mysql.com/ (np. Oracle (trial) mona załadowa z www.oracle.com) Uaktywnienie serwera (moe by równie instalowana jako serwis): mysqld --standalone Aktywowanie konsoli (monitora) połczenie z serwerem MySQL: mysql h host u user p mysql - to dla konta anonymous Zakoczenie pracy z konsol: quit Podstawowa pomoc: \help Sprawdzenie statusu serwera: \s Proste zapytania: Select version(); select Version(), Now(), user(), current_date(); 3
Podstawowe komendy mysql Poka istniejce bazy danych: show databases; Baza mysql opisuje prawa dostpu uytkowników Wybór aktualnej bazy danych: use DataBaseName Pokazanie tabel aktualnej bazy: show tables; Pokazanie struktury tabeli: explain TableName; describe TableName; 4
Typy danych M maksymalny wywietlany rozmiar (max.255) D liczba cyfr po kropce dziesitnej (max. 30, nie wicej ni M-2) [ ] cz opcjonalna ZEROFILL domylnie wpisuje zero Typy danych dane numeryczne TINYINT[(M)] [UNSIGNED] [ZEROFILL] od 128 do 127 lub od 0 do 255; 1 bajt BIT, BOOL to samo co TIMYINT(1) SMALLINT[(M)] [UNSIGNED] [ZEROFILL] od 32768 do 32767 lub od 0 do 65535; 2 bajty MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 3 bajty INT[(M)] [UNSIGNED] [ZEROFILL] oraz INTEGER[(M)] [UNSIGNED] [ZEROFILL] 4 bajty BIGINT[(M)] [UNSIGNED] [ZEROFILL] 8 bajtów FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] od -3.402823466E+38 do -1.175494351E-38, 0.0 oraz Od 1.175494351E-38 do 3.402823466E+38 DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] od -1.7976931348623157E+308 do -2.2250738585072014E-308, 0.0 oraz od 2.2250738585072014E-308 do 1.7976931348623157E+308 DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL] oraz REAL[(M,D)] [UNSIGNED] [ZEROFILL] to to samo co DOUBLE FLOAT(precision) [UNSIGNED] [ZEROFILL] dla precision<=24 równowane FLOAT, dla 25<=precision<=53 równowane DOUBLE DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL], DEC[(M[,D])] [UNSIGNED] [ZEROFILL] 5 NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL] niespakowana liczba; podobne do CHAR
Typy danych data i czas DATE data od 1000-01-01 do 9999-12-31 DATETIME - od 1000-01-01 00:00:00 do 9999-12-31 23:59:59 TIMESTAMP[(M)] zakres od 1970-01-01 00:00:00 do roku 2037; zalenie od M wywietlany jako YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD lub YYMMDD; uywany do zapisu czasu wykonania operacji INSERT i UPDATE jest automatycznie uaktualniany TIME czas w zakresie od -838:59:59 do 838:59:59 YEAR[(2 4)] rok 2 cyfrowy (1970-2079) lub 4 cyfrowy (1901 do 2155) Typy danych łacuchy znakowe [NATIONAL] CHAR(M) [BINARY] znaki (maksymalnie 255); porównywanie nie bierze pod uwag Wielkoci liter chyba e wyspecyfikowany jest parametr BINARY CHAR synonim CHAR(1) [NATIONAL] VARCHAR(M) [BINARY] łacuch o zmiennej długoci (max. 255 znaków) TINYBLOB, TINYTEXT BLOB lub TEXT o maksymalnej długoci 255 znaków BLOB, TEXT BLOB lub TEXT o maksymalnej długoci 65535 znaków MEDIUMBLOB, MEDIUMTEXT BLOB lub TEXT o maksymalnej długoci 16777215 znaków LONGBLOB, LONGTEXT BLOB lub TEXT o maksymalnej długoci 4294967295 znaków ENUM('value1','value2',...) łacuch zawierajcy elementy z typu wyliczeniowego SET('value1','value2',...) łacuch zawierajcy zero lub wicej elementów ze zdefiniowanego zbioru 6
Wykonywanie komend w trybie wsadowym: mysql < batch_file_name; Administrowanie np. za pomoc phpmyadmin wykorzystanie PHP do zarzdzania MySQL 7
SQL Structured Query Language jzyk dla RDBMS SQL to jzyk 4-generacji (4GL) (np. C to jzyk 3GL) SQL jest niezaleny od platformy i produktu (w znacznym stopniu, cho znaczce rónice) Jzyk strukturalny, a nie proceduralny. Opisuje na jakich danych operuje, ale nie opisuje jak to robi W relacyjnej bazie danych informacja podzielona jest na odrbne zbiory (tabele). Tabele składaj si z wierszy (rekordów). 8
Definiowanie danych Access/MySQL CREATE DATABASE [IF NOT EXISTS] db_name; DROP DATABASE [IF EXISTS] db_name; CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [select_statement]; create_definition: col_name type [NOT NULL NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] or PRIMARY KEY (index_col_name,...) or INDEX [index_name] (index_col_name,...) or UNIQUE [INDEX] [index_name] (index_col_name,...) Klucz podstawowy (unikalny); pola umoliwiajce wizanie z rekordami innych tabel Warto NULL oznacza brak danej (a nie np. pusty łacuch lub zero) 9
Definiowanie danych CREATE TABLE firmy( id NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), nazwa CHAR(30) NOT NULL, adres CHAR(50), nip CHAR(10) ); CREATE TABLE nowe_firmy (id, nip) AS (SELECT * FROM firmy); ALTER TABLE tabela MODIFY nazwa_kol typ; ALTER TABLE tabela ADD nazwa_kol typ; ALTER TABLE firmy modify adress CHAR(70); DROP TABLE nazwa_tabeli; DROP DATABASE nazwa_bazy_danych; 10
Wybieranie danych SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY] [DISTINCT DISTINCTROW ALL] select_expression,... [INTO {OUTFILE DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY {unsigned_integer col_name formula} [ASC DESC],... [HAVING where_definition] [ORDER BY {unsigned_integer col_name formula} [ASC DESC],...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] [FOR UPDATE LOCK IN SHARE MODE]] 11
Wybieranie danych SELECT Tw, Trefco, Tzco FROM co WHERE (((co.tw) Is Not Null)); SELECT * FROM co WHERE (((co.tw) Is Not Null)); SELECT * FROM co ; SELECT DISTINCT Tw FROM co WHERE Tw IS NOT NULL ORDER BY Tw; SELECT DISTINCT Tw, Tzco FROM co WHERE Tw IS NOT NULL AND Tzco IS NOT NULL ORDER BY Tw; Operatory arytmetyczne: +, -, *, / i % (modulo) SELECT T, co.tw, Trefco, (55-1.75*Tw) AS OblTRef, Trefco-OblTref AS Rónica FROM co WHERE Tw IS NOT NULL ORDER BY T; SELECT T FROM co WHERE Tw IS NULL; Operatory relacji: >, >=, <, <=, =, <> lub!= SELECT T, co.tw, Tzm, Tzco FROM co WHERE Tw<0 AND Tw >-10; 12
Wybieranie danych Operatory znakowe: LIKE ( _ oraz % ) oraz lub + (konkatenacja) SELECT Opis.Tabela, Opis.Pole, Opis.Opis FROM Opis WHERE Opis.Pole LIKE 'T_'; SELECT Opis.Pole + ' ' + Opis.Opis FROM Opis; Operatory logiczne: AND, OR, NOT SELECT DISTINCT Tw FROM Co WHERE Tw < 10 AND Tw >= 0 ORDER BY Tw; SQL oparty na teorii zbiorów: operatory sumy z wyłczeniem powtarzajcych si wierszy UNION, sumy bez eliminacji powtórze UNION ALL, iloczynu zbiorów INTERSECT oraz rónicy zbiorów MINUS SELECT Tw FROM Co WHERE Tw < 10 AND Tw >= 0 UNION SELECT Tw FROM Co WHERE Tw >=15; 13
Wybieranie danych Operatory In oraz BETWEEN SELECT * FROM Co WHERE Tw IN (10.0, 5.0, 0.0) ORDER BY Tw; SELECT T, Tw, Tzm FROM Co WHERE Tzm Between 50 And 60 ORDER BY T; SELECT Co.T, CWU.T, Co.Tzm, Cwu.Tzwu FROM CO, CWU WHERE Left(CStr(CO.T), 16) = Left(CStr(CWU.T), 16) AND Left(CStr(CO.T), 4) <= "2000"; 14
Agregacja danych COUNT zwraca liczb rekordów okrelonych fraz WHERE SELECT COUNT(*) AS POWYZEJ_NORMY FROM Co WHERE Tzco > 55-1.75*Tw +5; SUM zwraca sum wartoci kolumny AVG oblicza redni warto w kolumnie SELECT Sum(Tzco-(55-1.75*Tw))/Count(*) AS AVG_ABOVE FROM Co WHERE Tzco>55-1.75*[Tw]; SELECT AVG(Tzco-(55-1.75*Tw)) AS AVG_ABOVE FROM Co WHERE Co.Tzco>55-1.75*[Tw]; MAX, MIN maksimum oraz minimum danych z kolumny SELECT COUNT(*) AS COUNT, AVG(Tw) AS AVG, MIN(Tw) AS MIN, MAX(Tw) AS MAX FROM Co; Funkcje agregujce nie pracuj z fraz WHERE!!! SELECT * FROM Co WHERE Tw=MAX(Tw);!!! BŁD!!! ale SELECT * FROM Co WHERE Tw=(SELECT MAX(Tw) FROM Co); 15
Funkcje arytmetyczne ABS, CEIL, FLOOR, COS, COSH, SIN, SINH, TAN, TANH, EXP, LN, LOG, MOD, POWER, SIGN, SQRT (róne w rónych BDMS) Funkcje znakowe CHR (znak odpowiadajcy liczbie), LOWER i UPPER (zmiana wielkoci liter), REPLACE, SUBSTRING (wybór fragmentu łacucha) i wiele innych ale zalene od DBMS 16
Porzdkowanie danych SELECT Tw, Tzco FROM Co WHERE Tw IS NOT NULL AND Tzco IS NOT NULL ORDER By Tw ASC, Tzco DESC; GROUP BY Agregacja danych np. uzyskanie redniej Tzco dla kadej Tw SELECT Tw, AVG(Tzco) FROM Co GROUP BY Tw; HAVING WHERE nie działa z wyraeniami agregujcymi, ale robi to HAVING w stosunku do frazy GROUP BY SELECT Tw, AVG(Tzco) AS AVG_Tzco, AVG(Tzm) AS AVG_Tzm FROM Co GROUP BY Tw WHERE Tw < 0;!!! BŁD!!! SELECT Tw, AVG(Tzco) AS AVG_Tzco, AVG(Tzm) AS AVG_Tzm FROM Co GROUP BY Tw HAVING Tw < 0; 17
Łczenie tabel Krzyowe generuje iloczyn kartezjaski TO BARDZO BUO REKORDÓW Select * FROM Opis,Nastawa_Zdarzeniowa; SELECT T1.Tabela, T2.NazwaBloku FROM Opis T1, Nastawa_Zdarzeniowa T2; Równo-złczenia uzyskanie relacyjnego wizania SELECT T1.T, T1.D14CO, T2.Opis FROM CO_Potwierdzenie AS T1, D14CO_Opis AS T2 WHERE T1.D14co = T2.Stan; Łczenie tabeli samej z sob SELECT T1.NR_ELEMENTU, T2.Opis FROM Baza T1, Baza T2 WHERE T1.NR_ELEMENTU = T2.NR_ELEMENTU AND T1.OPIS <> T2.OPIS; 18
Zagniedony SELECT SELECT * FROM CO WHERE Tw < 0.9*(SELECT Min(Tw) From CO); EXISTS zwraca TRUE jeeli podzapytanie zwraca cokolwiek; Poniszy przykład zwraca cał tabel, a nie rekordy z zadanego podzbiory Tw; ponisze podzapytanie jest nieskorelowane jest ono wykonywane tylko jednokrotnie SELECT * FROM CO WHERE EXISTS(SELECT Tw FROM CO WHERE Tw>0 AND Tw<10) Zagniedenie moe by wielokrotne!!! 19
Wstawianie danych INSERT INTO nazwa_tabeli (kol1, kol2,...) VALUES (wart1, wart2,...) INSERT INTO TabelaTestowa ( liczba1, liczba2, liczba3 ) VALUES( 134, 256, 356); -- wprowadzanie do wybranych kolumn INSERT INTO TabelaTestowa VALUES( 134, 256, 356); -- wprowadzanie do kolejnych kolumn INSERT INTO TabelaTestowa ( liczba1, liczba2, liczba3 ) VALUES( 134, 256, 356); -- wprowadzanie do wybranych kolumn INSERT INTO TabelaTestowa ( liczba1, liczba3 ) VALUES( 134, 256); -- wprowadzanie do wybranych kolumn INSERT INTO TabelaTestowa ( liczba1, liczba2, liczba3 ) VALUES( 134, NULL, 356); -- wprowadzanie wartoci NULL IF NOT EXISTS (SELECT * FROM TabelaTestowa Where pole1 = 11) INSERT INTO tabelatestowa VALUES(456,345,345); 20
Wstawianie danych INSERT INTO nazwa_tabeli (kol1, kol2,...) SELECT kol1, kol2,... FROM nazwa_tabeli_1 WHERE warunek; INSERT INTO TabelaTestowa ( liczba1, liczba2, liczba3 ) SELECT P1, P2, P3 FROM InnaTabela Where P1 <> NULL; SELECT nie moe pobiera danych z tabeli do której wstawia rekordy Liczba kolumn w INSERT INTO oraz SELECT musi si zgadza Typ danych kolumn w INSERT INTO oraz SELECT musi si zgadza 21
Modyfikowanie danych UPDATE nazwa_tabeli SET nazwa_kol_1 = wart_1 [, nazwa_kol_x = wart_x] WHERE warunek_wyszukania; UPDATE tabelatestowa SET pole2 = 0 WHERE pole2 = NULL; UPDATE tabelatestowa SET pole2 = 1.05*pole2; Usuwanie danych DELETE FROM nazwa_tabeli WHERE warunek_wyszukania; 22
ODBC Open DataBase Connectivity Niezalene od bazy danych API; jednolity sposób komunikacji z baz Dostpne sterowniki dla rónorodnych baz danych (nawet to plików tekstowych) Architektura serwer-klient Aplikacja Menader sterowników Sterownik ODBC (przetwarza SQL) Baza danych 23
ODBC definicja ródeł danych 24
Literatura: 1. Stephens R.K., Plew R.R., Morgan B., Perkins J.: SQL w 3 tygodnie, Oficyna Wydawnicza LP&P, Warszawa, 1999. 2. MySQL Reference Manual 3. Freeze W.: Visual Basic 6. Programowanie baz danych, Wydawnictwo HELION, Gliwice, 2001. 4. Materiał edukacyjne z serwera www.w3schools.com 5. Microsoft Developer Network 25
Złczenia zewntrzne i wewntrzne (str.150) Zapytania skorelowane (str.168) ANY, ALL (str. 172) 26