MySQL jest szybkim, wielowątkowym serwerem baz danych
Transkrypt
MySQL jest szybkim, wielowątkowym serwerem baz danych
MySQL MySQL jest szybkim, wielowątkowym serwerem baz danych obsługującym język zapytań SQL. Pracuje z wieloma użytkownikami i doskonale nadaje się do wykorzystania razem z PHP jako darmowa platforma aplikacji internetowych. MySQL jest typu Open Source Software (oprogramowanie z dostępnym dla każdego chętnego kodem źródłowym). Dostępne źródła oznaczają, że każdy może ich użyć i modyfikować je. Każdy może ściągnąć MySQL poprzez Internet i korzystać z niego bez żadnych opłat. Najnowszą wersję serwera MySQL (5.0.1) można pobrać ze strony http://dev.mysql.com/downloads/ Na MySQL-u "poznali się" również wielcy świata komputerowego – Silicon Graphics oraz Siemens. Najprawdopodobniej znacznie większa liczba wielkich firm korzysta z tego rozwiązania, nie mówiąc nikomu o tym w obawie przed ośmieszeniem. 1 Poniższa lista przedstawia kilka istotnych właściwości MySQL: •W pełni wielowątkowy, używający wątków jądra. Oznacza to łatwe wykorzystnie systemu wieloprocesorowego. •W danym momencie z bazy danych może korzystać nieograniczona liczba osób; zależy to jedynie od zasobów fizycznych serwera. •Działa na wielu różnych platformach, np. LINUX, WINDOWS, SOLARIS, FREE BSD. •Bardzo elastyczny i bezpieczny system praw i haseł pozwalający na weryfikację na podstawie hosta (z którego łączy się użytkownik). Hasła są bezpieczne, ponieważ cały ruch haseł w momencie logowania sie na serwerze jest szyfrowany. •Bardzo szybkie tablice dyskowe oparte na B-drzewach z kompresją indeksów. •Możliwość użycia do 32 indeksów w tabeli. Każdy indeks może składać się z od 1 do 16 kolumn lub części kolumn. Maksymalna długość indeksu to 500 bajtów (można to zmienić przy kompilacji MySQL). •Radzi sobie z wielkimi bazami. MySQL może być używany z kilkoma bazami zawierającymi 50.000.000 rekordów. •Wszystkie kolumny mają wartość domyślną. Można użyć INSERT do wstawienia podzbioru kolumn tabeli. Te kolumny, które nie mają wprost podanych wartości zostaną wypełnione wartościami domyślnymi. •Zawiera myisamchk, bardzo szybkie narzędzie do sprawdzania, optymalizacji i naprawy tabel. •Pełna obsługa kilkunastu różnych metod kodowania znaków, włącznie z ISO-8859-2 2 •Wszystkie dane zapisywane są z uwzględnieniem wybranego sposobu kodowania. Wszystkie porównania są nieczułe na wielkość liter. •Sortowanie dokonywane jest zgodnie z wybraną stroną kodową. Możliwa jest zmiana tego parametru przy starcie serwera. MySQL obsługuje wiele różnych stron kodowych, które mogą być podane w czasie kompilacji oraz uruchomienia. •DELETE, INSERT, REPLACE i UPDATE zwracają informację ile wierszy zostało zmienionych •Nazwy funkcji nie kolidują z nazwami tabel lub kolumn. Na przykład ABS jest poprawną nazwą kolumny. Jedynym ograniczeniem jest to, że między wywołaniem funkcji a znakiem '(' nie może występować odstęp, np. SELECT abs(zysk) FROM... SELECT abs FROM... •Serwer może wysyłać do klienta komunikaty o błędach w wielu językach. Istnieją jednak też pewne ograniczenia MySql. •nie zapewnia pełnej implementacji SQL, •często obsłużenie pewnych funkcji jest nieco bardziej złożone niż w komercyjnych systemach •brak transakcji (w wersji 4.x) •brak zagnieżdżonych zapytań. 3 W MySQL'u istnieje kilka typów tabel. Poprzez odpowiednie ich połączenie i dopasowanie do potrzeb, możemy uzyskać zadziwiający wzrost wydajności. Oto lista obecnie istniejących typów: •MyISAM •ISAM - domyślny typ tabel; szybki, nie wspomaga transakcji. - starsza wersja typu MyISAM o mniejszych możliwościach i mniejszej wydajności. Nie wspomaga transakcji. •HEAP - ten typ jest znacznie szybszy od wszystkich innych. Wynika to z tego, iż składowany jest wyłącznie w pamięci RAM. Jeśli MySQL ulegnie awarii, danych tam zawartych nie będzie można już odzyskać. Również nie wspomaga transakcji. •BerkeleyDB (BDB) - Za typ ten nie odpowiada firma MySQL AB; dlatego też domyślnie obecny jest tylko w pakiecie MySQL-MAX. Wspomaga transakcje, lecz tabele w tym formacie działają najwolniej ze wszystkich. •InnoDB - Również wspomaga transakcje, jest jednym z wbudowanych typów. Największą wydajność osiąga na wielogigabajtowych bazach z bardzo dużą ilością odwołań w ciągu sekundy. •Merge – pozwala definiować połączenie kilku niezależnych tabel w jedną. Jest to pewna wariacja MyISAM'a. Jest to kilka tabel MyISAM o takiej samej strukturze, których można używać jako jedną. 4 Typy danych FIREBIRD • • • • • • • • • • • • • MySQL VARCHAR SMALLINT INTEGER BIGINT FLOAT DOUBLE PRECISION DECIMAL DATE TIME TIMESTAMP CHAR BLOB VARCHAR SMALLINT INT BIGINT FLOAT DOUBLE DECIMAL DATE TIME TIMESTAMP CHAR BLOB NUMERIC MEDIUMINT TEXT DATETIME YEAR TINYBLOB TINYTEXT MEDIUMBLOB MEDIUMTEXT LONGBLOB LONGTEXT ENUM SET TINYINT BOOL, BOOLEAN TINYTEXT - ciąg znaków o długości do 255 TEXT – ciąg znaków o długości do 65,535 (216 -1) MEDIUMTEXT - ciąg znaków o długości do16,777,215 (224 -1) LONGTEXT - ciąg znaków o długości do 232 –1 YEAR[2|4] – rok w formacie dwu- (70 - 69) lub czterocyfrowym (1901 - 2155) DATETIME – kombinacja daty i czasu z przedziału 1970-01-01 00:00:00 do 9999-12-31 23:59:59 TINYBLOB – dane binarne o max wielkości 255 bajtów MEDIUMBLOB - dane binarne o max wielkości 224 -1 bajtów LONGBLOB - dane binarne o max wielkości 232 -1 bajtów MEDIUMINT – liczby całkowite z przedziału –8388608 do 8388607 lub od 0 do 4294967295 TINYINT – liczby całkowite z przedziału od –128 do 127 lub od 0 do 255 ENUM – typ wyliczeniowy, który może posiadać max 65535 różnych wartości SET – typ zbiorowy, który może posiadać max 64 wartości 5 EDYCJA TABELI • CHANGE – polecenie zmieniające nazwę pola (kolumny) Np. ALTER TABLE adresy CHANGE adres_email email VARCHAR(100); • MODIFY – polecenie zmieniające jedynie właściwość pola Np. ALTER TABLE adresy MODIFY email VARCHAR(80); • AFTER – polecenie dodające nowe pole po innym Np. ALTER TABLE adresy ADD telefon VARCHAR(15) AFTER adres; • FIRST – polecenie dodające nowe pole na początku tabeli WYBIERANIE REKORDÓW I MODYFIKACJA • LIMIT – wybiera określoną liczbę wierszy Np. SELECT * FROM employee LIMIT 2; SELECT * FROM employee LIMIT 1,2; • COALESCE(wartości) – polecenie zwracające z listy pierwszą wartość różną od NULL; • GREATEST(wartości) –zwraca największy z podanych argumentów; Np. SELECT GREATEST(‘B’, ‘A’, ‘C’); • LEAST(wartości) – zwraca najmniejszą wartość; Np. SELECT LEAST(‘B’, ’A’, ‘C’); • LOAD_FILE(nazwa_pliku) – zwraca zawartość pliku; Np. UPDATE pracownicy SET zdjecie=LOAD_FILE(‘C:\zdjecie.jpg’) WHERE id=1; 6 FUNKCJE Poza tym MySQL zawiera pełno funkcji matematycznych, dotyczących daty, napisów, funkcji kryptograficznych: • AES_ENCRYPT(str,key_str) • AES_DECRYPT(crypt_str,key_str) • DECODE(crypt_str,pass_str) • ENCODE(str,pass_str) • DES_DECRYPT(crypt_str[,key_str]) • DES_ENCRYPT(str[,(key_num|key_str)]) • MD5(str) • SHA1(str) • SHA(str) • CEIL(X) • CRC32(expr) • DEGREES(X) • PI() • RAND(N) • SIGN(X) • TRUNCATE(X,D) 7 UPRAWNIENIA System uprawnień MySQL-a opiera się ma pięciu tabelach znajdujących się w bazie MySQL. • TABELA TABLES_PRIV – definiuje przywileje dostępu do określonych tabel +-----------------+---------------+------+-----+-------+ | Field | Type | Null | Key |Default| +-----------------+---------------+------+-----+-------+ | Host | char(60) | | PRI | | | Db | char(64) | | PRI | | | User | char(16) | | PRI | | | Table_name | char(64) | | PRI | | | Grantor | char(77) | | | | | Timestamp | timestamp(14) | YES | | NULL | | Table_priv | 1) | | | | | Column_priv | 2) | | | | +-----------------+---------------+------+-----+-------+ 1) set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') 2) set('Select','Insert','Update','References') • TABELA USER – definiuje użytkowników, ich uprawnienia w naszym systemie +-----------------+---------------+------+-----+-----+ | Field | Type | Null | Key |Default +-----------------+---------------+------+-----+-----+ | Host | char(60) | | PRI | | | Db | char(64) | | PRI | | | Select_priv | enum('N','Y') | | | N | | Insert_priv | enum('N','Y') | | | N | | Update_priv | enum('N','Y') | | | N | | Delete_priv | enum('N','Y') | | | N | | Create_priv | enum('N','Y') | | | N | | Drop_priv | enum('N','Y') | | | N | | Grant_priv | enum('N','Y') | | | N | | References_priv | enum('N','Y') | | | N | | Index_priv | enum('N','Y') | | | N | | Alter_priv | enum('N','Y') | | | N | +-----------------+---------------+------+-----+-----+ 8 • TABELA DB – określa dostęp do bazy danych +-----------------+---------------+------+-----+-----+ | Field | Type | Null | Key |Default +-----------------+---------------+------+-----+-----+ | Host | char(60) | | PRI | | | Db | char(64) | | PRI | | | User | char(16) | | PRI | | | Select_priv | enum('N','Y') | | | N | | Insert_priv | enum('N','Y') | | | N | | Update_priv | enum('N','Y') | | | N | | Delete_priv | enum('N','Y') | | | N | | Create_priv | enum('N','Y') | | | N | | Drop_priv | enum('N','Y') | | | N | | Grant_priv | enum('N','Y') | | | N | | References_priv | enum('N','Y') | | | N | | Index_priv | enum('N','Y') | | | N | | Alter_priv | enum('N','Y') | | | N | +-----------------+---------------+------+-----+-----+ • TABELA HOST – dokładniej definiuje przywileje zawarte w tabeli DB +-----------------+---------------+------+-----+-----+ | Field | Type | Null | Key |Default +-----------------+---------------+------+-----+-----+ | Host | char(60) | | PRI | | | Db | char(64) | | PRI | | | Select_priv | enum('N','Y') | | | N | | Insert_priv | enum('N','Y') | | | N | | Update_priv | enum('N','Y') | | | N | | Delete_priv | enum('N','Y') | | | N | | Create_priv | enum('N','Y') | | | N | | Drop_priv | enum('N','Y') | | | N | | Grant_priv | enum('N','Y') | | | N | | References_priv | enum('N','Y') | | | N | | Index_priv | enum('N','Y') | | | N | | Alter_priv | enum('N','Y') | | | N | +-----------------+---------------+------+-----+-----+ 9 • TABELA COLUMNS_PRIV – określa uprawnienia do kolumn +-------------+------------------------+------+-----+---------+ | Field | Type | Null | Key | Default | +-------------+------------------------+------+-----+---------+ | Host | char(60) binary | | PRI | | | Db | char(64) binary | | PRI | | | User | char(16) binary | | PRI | | | Table_name | char(64) binary | | PRI | | | Column_name | char(64) binary | | PRI | | | Timestamp | timestamp(14) | YES | | NULL | | Column_priv | set('Select','Insert', | | | | | | 'Update','References') | | | | +-------------+------------------------+------+-----+---------+ opracowanie: 10