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