Darmowy fragment publikacji:
IDZ DO
IDZ DO
PRZYK£ADOWY ROZDZIA£
PRZYK£ADOWY ROZDZIA£
SPIS TREœCI
SPIS TREœCI
KATALOG KSI¥¯EK
KATALOG KSI¥¯EK
KATALOG ONLINE
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
TWÓJ KOSZYK
DODAJ DO KOSZYKA
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ZAMÓW INFORMACJE
O NOWOœCIACH
O NOWOœCIACH
ZAMÓW CENNIK
ZAMÓW CENNIK
CZYTELNIA
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Koœciuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
MySQL. Szybki start.
Wydanie II
Autor: Larry Ullman
T³umaczenie: Pawe³ Gonera na podstawie
„MySQL. Szybki start” w t³umaczeniu Marka Pa³czyñskiego
ISBN: 83-246-0665-3
Tytu³ orygina³u: MySQL, Second Edition:
Visual QuickStart Guide (2nd Edition)
Format: B5, stron: 480
B³yskawiczny kurs u¿ytkowania jednej z najpopularniejszych baz danych
MySQL to system zarz¹dzania bazami danych, dostêpny na licencji open-source.
Swoimi mo¿liwoœciami nie ustêpuje w niczym potê¿nym komercyjnym systemom.
Wykorzystywany jest zarówno jako zaplecze bazodanowe witryn WWW, jak i Ÿród³o
danych dla rozbudowanych aplikacji korporacyjnych. MySQL dostêpny jest niemal
dla wszystkich systemów operacyjnych. Ogromn¹ zalet¹ jest jego prosta obs³uga.
Dziêki temu nawet pocz¹tkuj¹cy u¿ytkownicy szybko opanuj¹ wszystkie mo¿liwoœci
i wykorzystaj¹ je w pracy. Zaawansowani z pewnoœci¹ doceni¹ wydajnoœæ, stabilnoœæ
i funkcje znane z „kombajnów”, takich jak Oracle lub MS SQL Server.
Ksi¹¿ka „MySQL. Szybki start. Wydanie II” to kolejna edycja przewodnika po
podstawach korzystania z tej bazy danych. W tej ksi¹¿ce, zaktualizowanej zgodnie
z najnowsz¹ wersj¹ programu, znajdziesz informacje dotycz¹ce instalowania MySQL,
uruchamiania go w ró¿nych systemach operacyjnych oraz administrowania nim.
Nauczysz siê zak³adaæ bazy i tabele, wykorzystywaæ jêzyk SQL do manipulowania
danymi w bazie oraz ³¹czyæ siê z baz¹ danych z poziomu programów napisanych
w ró¿nych jêzykach. Ka¿de zagadnienie jest przedstawione na praktycznym, bogato
ilustrowanym przyk³adzie, co doskonale pomo¿e Ci w przyswojeniu wiedzy.
Ksi¹¿ka porusza nastêpuj¹ce tematy:
(cid:129) Instalacja MySQL w aplikacji Windows i Linuksie
(cid:129) Konfiguracja serwera bazy danych
(cid:129) Korzystanie z programu mysqladmin
(cid:129) Projektowanie i tworzenie baz danych
(cid:129) Wprowadzanie, pobieranie i modyfikowanie danych za pomoc¹ jêzyka SQL
(cid:129) £¹czenie skryptów PHP i Perla z baz¹ danych MySQL
(cid:129) Korzystanie z MySQL w programach napisanych w Javie
(cid:129) Wyzwalacze i perspektywy
(cid:129) Administrowanie serwerem MySQL
Poznaj ogrom mo¿liwoœci systemu MySQL
Spis treści
Spis treści
Wprowadzenie
Rozdział 1.
Instalowanie MySQL
Ogólny opis instalacji
Instalacja MySQL w systemie Windows
Konfigurowanie MySQL w systemie Windows
Instalowanie MySQL w systemie Linux
Podstawowe opcje konfiguracyjne
Uaktualnianie MySQL
Rozdział 2. Uruchamianie MySQL
Uruchamianie MySQL w systemie Windows oraz Windows NT
Uruchamianie MySQL w systemach Linux i Unix
Wykorzystywanie mysqladmin
Ustawianie hasła użytkownika root
Klient MySQL
Użytkownicy i ich prawa
Rozdział 3. Projektowanie bazy danych
Normalizacja
Klucze
Relacje
Pierwsza postać normalna
Druga postać normalna
Trzecia postać normalna
Rozdział 4. Tworzenie bazy danych MySQL
Typy danych MySQL
Dodatkowe charakterystyki kolumn
Wprowadzenie do indeksów
Końcowy etap projektu
Wybór maszyny zapisu
Zestawy znaków i sposoby sortowania
S
p
i
s
t
r
e
ś
c
i
9
17
18
21
24
26
31
34
37
38
47
50
53
55
59
69
70
71
73
75
77
80
83
84
89
92
94
97
100
5
i
c
ś
e
r
t
s
i
p
S
Spis treści
Tworzenie baz danych
Tworzenie tabel
Modyfikacja tabel
Rozdział 5. Podstawy SQL
Wykorzystywanie wartości w zapytaniach
Wprowadzanie danych
Pobieranie danych
Wyrażenia warunkowe
Użycie LIKE i NOT LIKE
Złączenia
Sortowanie wyników zapytania
Ograniczanie liczby zwracanych wyników
Uaktualnianie danych
Usuwanie danych
Rozdział 6. Funkcje MySQL
Funkcje tekstowe
Konkatenacja i aliasy
Funkcje numeryczne
Funkcje przetwarzania daty i czasu
Formatowanie daty i czasu
Funkcje szyfrowania
Funkcje grupowania
Pozostałe funkcje
Rozdział 7. MySQL i PHP
Łączenie z MySQL i wybieranie bazy danych
Proste zapytania
Przetwarzanie wyników zapytania
Korzystanie z mysqli_insert_id()
Obsługa błędów
Bezpieczeństwo
Rozdział 8. MySQL i Perl
Instalacja Perla z obsługą MySQL
w systemie operacyjnym Windows
Instalowanie obsługi MySQL w Perlu
w systemie operacyjnym Unix
Testowanie Perla i MySQL
Łączenie z MySQL
6
103
105
110
113
114
116
120
123
126
129
135
137
139
141
145
146
149
154
157
161
163
166
169
173
174
178
186
194
201
204
217
218
221
223
227
Przetwarzanie wyników zapytania
Wykonywanie prostych zapytań
Pozyskiwanie wartości InsertID
Obsługa błędów
Zagadnienia bezpieczeństwa
Zastosowanie instrukcji przygotowanych
Rozdział 9. MySQL i Java
Instalacja sterownika MySQL dla Javy
Łączenie z bazą danych
Wykonywanie prostych zapytań
Przetwarzanie wyników zapytania
Pozyskiwanie wartości InsertID
Zastosowanie instrukcji przygotowanych
Rozdział 10. SQL i MySQL dla zaawansowanych
Wykorzystywanie transakcji
Przeszukiwanie typu FULLTEXT
Wyrażenia regularne
Zmienne definiowane przez użytkownika
Wprowadzenie do unii
Rozdział 11. Funkcje MySQL 5
Podprogramy przechowywane
Zastosowanie parametrów OUT
Wyzwalacze
Perspektywy
Rozdział 12. Techniki programowania
Zapisywanie i pobieranie danych binarnych
Tworzenie stron z wynikami zapytania
Zastosowanie transakcji w języku Perl
Rozdział 13. Administrowanie MySQL
Program MySQL Administrator
Tworzenie kopii zapasowych baz danych
Importowanie danych
Dzienniki pracy MySQL
Utrzymanie bazy danych
Podnoszenie wydajności
Korzystanie z plików wsadowych
Spis treści
230
234
239
242
246
249
255
256
259
266
273
280
286
291
292
299
309
312
315
321
322
342
345
350
357
358
376
390
399
400
404
408
410
413
417
421
7
S
p
i
s
t
r
e
ś
c
i
Spis treści
Dodatek A
Dodatek B
Dodatek C
i
c
ś
e
r
t
s
i
p
S
Rozwiązywanie problemów
Instalacja
Uruchamianie MySQL
Dostęp do MySQL
Problemy z mysql.sock
Zapytania zwracające nieoczekiwane wyniki
Problemy z protokołem uwierzytelniania
Zmiana hasła użytkownika root
Przegląd SQL i MySQL
Podstawy SQL
Polecenia ALTER
Klauzule SQL
Prawa dostępu MySQL
Typy danych MySQL
Funkcje MySQL
Pozostałe informacje
Źródła informacji
Źródła specyficzne dla MySQL
Aplikacje MySQL innych dostawców
SQL
PHP
Perl
Java
Pozostałe źródła informacji
Skorowidz
425
426
427
428
430
432
433
434
437
438
440
441
442
443
445
449
451
452
454
455
456
457
458
459
461
8
Tworzenie
bazy danych MySQL
Tworzenie bazy danych MySQL
Rozdział 4. Tworzenie bazy danych MySQL
W rozdziale 3., „Projektowanie bazy danych”,
przedstawiłem operacje potrzebne
do opracowania schematu bazy danych, które
nazywane są normalizacją. Operacje te mogą
być wykonywane w dowolnej relacyjnej bazie
danych i nie są specyficzne dla MySQL.
W tym rozdziale napiszę, w jaki sposób
zaimplementować bazę danych w serwerze
MySQL.
Proces ten rozpoczniemy od zapoznania się
z dostępnymi typami danych oraz sposobami
ich dalszego dostosowywania. Kolejno
poznamy indeksy poprawiające wydajność
bazy danych, zakończymy projektowanie każdej
z tabel przez wybranie właściwych nazw
i wybierzemy typy tabel. Na koniec wrócimy
do pracy z narzędziami MySQL, tworząc
i być może modyfikując bazę danych i tabele.
T
w
o
r
z
e
n
i
e
b
a
z
y
d
a
n
y
c
h
M
y
S
Q
L
83
Rozdział 4.
Typy danych MySQL
Po zdefiniowaniu wszystkich wymaganych
tabel i kolumn konieczne jest określenie typu
danych przechowywanych w każdym z pól.
Podczas tworzenia bazy danych (co zostanie
przedstawione w następnym rozdziale) będzie
wymagane określenie rodzaju informacji,
które będą przechowywane w każdym z pól.
Niemal każda baza danych opiera się na
trzech ich kategoriach:
(cid:88) tekst;
(cid:88) liczby;
(cid:88) data i czas.
W każdej z wymienionych grup wyróżnia się
kilka odmian typów danych, z których pewne
są charakterystyczne jedynie dla MySQL.
Właściwy wybór typu dla danej kolumny
wpływa nie tylko na rodzaj informacji, jakie
mogą być w niej gromadzone oraz na sposób
ich przechowywania, ale również na całkowitą
wydajność bazy danych. Wiele typów pozwala
na określenie opcjonalnego atrybutu Długość
(nawiasy kwadratowe — [] — oznaczają,
że pomiędzy nimi można wstawić parametr
opcjonalny, tymczasem nawiasy okrągłe
odpowiadają argumentom obowiązkowym).
L
Q
S
y
M
h
c
y
n
a
d
y
p
y
T
Tabela 4.1. Znajduje się tu większość typów numerycznych, jakich można użyć w bazach danych MySQL.
Dla typów FLAT, DOUBLE oraz DECIMAL argument Długość określa maksymalną liczbę cyfr, natomiast
argument Pozycje określa liczbę cyfr po kropce dziesiętnej (od MySQL 5.0.3 rozmiar kolumny DECIMAL
jest określany przez wyrażenie)
Numeryczne typy danych MySQL
Typ
TINYINT[Długość]
Rozmiar
1 bajt
Opis
Liczba z zakresu od –128 do 127 lub od 0 do 255, jeżeli jest
typu UNSIGNED.
Liczba z zakresu od –32 768 do 32 767 lub od 0 do 65 535,
jeżeli jest typu UNSIGNED.
Liczba z zakresu od –8 388 608 do 8 388 607 lub od 0 do
16 777 215, jeżeli jest typu UNSIGNED.
Liczba z zakresu od –2 147 483 648 do 2 147 483 647 lub
od 0 do 4 294 967 295, jeżeli jest typu UNSIGNED.
Liczba z zakresu od –9 223 372 036 854 775 808 do
9 223 372 036 854 775 807 lub od 0 do
18 446 744 073 709 551 615, jeżeli jest typu UNSIGNED.
Mała wartość zmiennoprzecinkowa.
Duża wartość zmiennoprzecinkowa.
Wartość typu DOUBLE ze stałą liczbą cyfr po przecinku.
SMALLINT[Długość]
MEDIUMINT[Długość]
INT[Długość]
2 bajty
3 bajty
4 bajty
BIGINT[Długość]
8 bajtów
FLOAT[Długość,Pozycje]
DOUBLE[Długość,Pozycje]
DECIMAL[Długość,Pozycje] Długość + 1 lub
4 bajty
8 bajtów
Długość + 2 bajty
84
Tworzenie bazy danych MySQL
W tabeli 4.1 wymienione są typy numeryczne.
Największa różnica występuje między typami
całkowitymi i zmiennoprzecinkowymi (które
zawierają kropkę dziesiętną). Następne różnice
łatwo zauważyć w zakresie możliwych
wartości (dla liczb całkowitych) lub poziomu
dokładności (dla liczb zmiennoprzecinkowych).
W tabeli 4.2 wymienione są typy tekstowe.
Większość z nich różni się rozmiarem,
ale kilka pozwala na przechowywanie danych
binarnych zamiast ciągów znaków. Dostępne
są również dwa rozszerzenia dla typów
tekstowych — ENUM oraz SET — które
umożliwiają definiowanie serii akceptowanych
wartości w czasie tworzenia tabeli. Pole typu
ENUM pozwala na użycie jednej z kilku tysięcy
wartości, natomiast typu SET — na wybranie
kilku z maksymalnie 64 możliwych wartości.
Z typami ENUM i SET są związane dwie pułapki
— typy te nie są obsługiwane w innych bazach
danych i ich zastosowanie podważa zasady
normalizacji.
Opis
Pole o stałej długości; długość od 0 do 255 znaków.
Pole o stałej długości; długość od 0 do 255 znaków (od
MySQL 5.0.3 65 535 znaków).
Ciąg tekstowy o maksymalnej długości 255 znaków.
Ciąg tekstowy o maksymalnej długości 65 536 znaków.
Ciąg tekstowy o maksymalnej długości 16 777 215 znaków.
Ciąg tekstowy o maksymalnej długości 4 294 967 295 znaków.
Podobny do CHAR, ale przechowuje dane binarne.
Podobny do VARCHAR, ale przechowuje dane binarne.
Przechowuje dane binarne o maksymalnej długości 255 bajtów.
Przechowuje dane binarne o maksymalnej długości 65 535
bajtów.
Przechowuje dane binarne o maksymalnej długości
16 777 215 bajtów.
Przechowuje dane binarne o maksymalnej długości
4 294 697 295 bajtów.
Wyliczenie, które pozwala na to, by każda kolumna posiadała
jedną z kilku możliwych wartości.
Typ podobny do ENUM z tą różnicą, że może posiadać więcej
niż jedną z dopuszczalnych wartości.
85
Tabela 4.2. Znajdują się tu najczęściej używane typy pozwalające na przechowywanie tekstu w bazie danych
MySQL
Tekstowe typy danych MySQL
Typ
CHAR[Długość]
VARCHAR(Długość)
Rozmiar
Liczba bajtów
Długość ciągu + 1 bajt
T
y
p
y
d
a
n
y
c
h
M
y
S
Q
L
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
BINARY[Długość]
VARBINARY[Długość]
TINYBLOB
BLOB
Długość ciągu + 1 bajt
Długość ciągu + 2 bajty
Długość ciągu + 3 bajty
Długość ciągu + 4 bajty
Długość bajtów
Długość danych + 1 bajt
Długość danych + 1 bajt
Długość danych + 2 bajty
MEDIUMBLOB
Długość danych + 3 bajty
LONGBLOB
Długość danych + 4 bajty
ENUM
SET
1 lub 2 bajty
1,2,3,4 lub 8 bajtów
Tabela 4.3. Dostępne w MySQL typy daty i czasu
Typy danych MySQL
Typ
DATE
Rozmiar
3 bajty
DATETIME
8 bajtów
TIMESTAMP
4 bajty
TIME
YEAR
3 bajty
1 bajt
Opis
Data w formacie:
RRRR-MM-DD.
Data i czas w formacie:
RRRR-MM-DD
GG:MM:SS.
Znacznik czasowy
w formacie: GG:MM:SS;
zakres wartości kończy się
w roku 2037.
Znacznik czasowy
w formacie GG:MM:SS.
Rok w formacie RRRR
i zakresie od 1901 do 2155.
Rozdział 4.
Różne typy dla daty i czasu (tabela 4.3)
mają własne unikalne cechy, które są
udokumentowane w podręczniku i opisywane
w różnych fragmentach tej książki. Zazwyczaj
z tych typów korzysta się bez modyfikacji,
więc nie trzeba brać pod uwagę ich zawiłości.
Wybierając typ danych:
1. Określ, czy kolumna będzie przechowywała
dane tekstowe, liczbowe, czy też daty.
Zazwyczaj jest to prosty i oczywisty etap.
Do przechowywania wartości liczbowych
należy użyć typu numerycznego. Jeżeli
kolumna może zawierać wartości inne
niż numeryczne, należy użyć kolumn
tekstowych.
W przypadku danych, takich jak kody
pocztowe czy sumy pieniężne, które będą
przechowywane wraz z dodatkowymi
znakami (np. znak myślnika czy oznaczenie
waluty), używa się pól tekstowych, choć
zapisanie ich jako wartości liczbowych
daje lepsze rezultaty. Problem formatowania
będzie rozwiązywany w innymi miejscu.
2. Wybierz dla danej kolumny odpowiedni
typ z danej kategorii.
Mając na uwadze wysoką wydajność
bazy danych, warto pamiętać, że:
(cid:86) pola o stałej długości (jak CHAR) są
zazwyczaj szybciej przetwarzane niż
pola o zmiennej długości (jak VARCHAR),
choć z drugiej strony zajmują więcej
przestrzeni dyskowej — więcej
informacji na ten temat zamieszczono
we wskazówce;
L
Q
S
y
M
h
c
y
n
a
d
y
p
y
T
(cid:86) rozmiar każdego z pól powinien być
ograniczony do najmniejszej możliwej
wartości, którą można wyznaczyć,
określając największą możliwą wartość
wprowadzaną do danego pola; jeżeli
przykładowo największa długość
nazwy towaru będzie równa 20,
to dla danej kolumny powinno się
wybrać typ VARCHAR(20);
(cid:86) należy pamiętać, że wprowadzenie
pięcioznakowego ciągu tekstowego
do pola typu CHAR(2) spowoduje obcięcie
trzech ostatnich znaków, ta prawidłowość
znajduje zastosowanie we wszystkich
polach — jeżeli przekroczy się
maksymalny zakres dla kolumny,
cześć danych zostanie utracona.
86
Typ kolumny
SMALLINT(4)
Tabela 4.4. Innym aspektem projektowania bazy
danych jest dobór optymalnego typu danych dla
każdego z pól
Baza danych finansów
Nazwa kolumny
Tabela
Numer faktury
Faktury
Klient ID
Faktury
Data wystawienia faktury Faktury
Faktury
Wartość faktury
Faktury
Opis faktury
Termin płatności
Faktury
Klienci
Klient ID
Klienci
Nazwa klienta
Klienci
Ulica klienta
Miasto klienta
Klienci
Klienci
Stan klienta
Klienci
Kod pocztowy klienta
Telefon klienta
Klienci
Osoba kontaktowa
Klienci
Adres e-mail kontaktowy Klienci
Wydatki
Wydatek ID
Wydatki
Kategoria wydatku ID
Wartość wydatku
Wydatki
Wydatki
Opis wydatku
Wydatki
Data zapłaty
Kategorie
Kategoria wydatku ID
wydatków
Kategorie
wydatków
SMALLINT(3)
TIMESTAMP
DECIMAL(10,2)
TINYTEXT
DATE
SMALLINT(3)
VARCHAR(40)
VARCHAR(80)
VARCHAR(30)
CHAR(2)
MEDIUMINT(5)
VARCHAR(14)
VARCHAR(40)
VARCHAR(60)
SMALLINT(4)
TINYINT(3)
DECIMAL(10,2)
TINYTEXT
DATE
TINYINT(3)
Kategoria wydatku
VARCHAR(30)
Tworzenie bazy danych MySQL
W przypadku liczb należy się
zdecydować, czy trzeba przechowywać
część ułamkową. Decyzja ta dzieli nasz
obszar zainteresowania na liczby całkowite
i rzeczywiste. Jeżeli ważna jest dokładność
matematyczna, należy użyć typu DECIMAL,
który jest znacznie dokładniejszy niż FLOAT
lub DOUBLE.
3. Ustal maksymalną długość kolumn
tekstowych lub liczbowych (tabela 4.4).
Zamiast rozpisywania się o sposobach
i przyczynach takiego, a nie innego
zdefiniowania wszystkich 22 przykładowych
kolumn, wszystkie ich własności zestawiono
w tabeli 4.4. Niektórzy programiści mogą
mieć odmienne propozycje. Najistotniejsze
jest jednak, aby dostosować każdy typ do
rozmiarów przechowywanych informacji,
zamiast korzystać zawsze z podstawowych
(nieefektywnych) typów TEXT i INT.
T
y
p
y
d
a
n
y
c
h
M
y
S
Q
L
87
Rozdział 4.
Wskazówki
(cid:132) Wiele z nazw typów posiada synonimy,
np. INT — INTEGER, DEC — DECIMAL itd.
(cid:132) Pole typu TIMESTAMP jest uaktualniane
automatycznie podczas wykonywania
polecenia INSERT czy UPDATE, nawet jeżeli
dla danego pola nie określono żadnej
wartości. W zależności od wersji MySQL,
pola typu TIMESTAMP mają różne
właściwości.
(cid:132) Dostępny jest również typ BLOB, będący
odmianą typu TEXT, który pozwala
na przechowywanie w tabeli plików
binarnych. Przykład użycia zostanie
zaprezentowany w rozdziale 12. „Techniki
programowania”.
(cid:132) W polach daty i czasu MySQL dodatkowo
sprawdza poprawność podanych danych
w czasie ich wstawiania. Do wersji 5.0.2
dostępna była tylko podstawowa kontrola,
czy miesiąc nie jest większy niż 12 i dzień
większy niż 31. Od wersji 5.0.2 dodatkowo
podany dzień musi istnieć w kalendarzu,
np. jeżeli zostanie podana data 2006-02-31,
zwrócony zostanie błąd daty.
(cid:132) Rozmiar wymagany do zapamiętania
ciągu znaków o zmiennej długości zależy
również od wykorzystywanego zestawu
znaków, np. znaki spoza alfabetu
angielskiego mogą potrzebować
więcej miejsca.
L
Q
S
y
M
h
c
y
n
a
d
y
p
y
T
88
CHAR a VARCHAR
Co do przewagi któregokolwiek z tych
dwóch podobnych do siebie typów wciąż
trwają dyskusje. Oba przechowują ciągi
tekstowe i mogą być definiowane
z podaniem maksymalnej jego długości.
Podstawowa różnica polega na tym,
że jakiekolwiek dane zapisane jako CHAR
zawsze będą zapisywane jako ciąg
tekstowy o długości określonej dla danej
kolumny (wypełnienie znakami spacji).
Z kolei długość ciągów tekstowych typu
VARCHAR jest równa długości
przechowywanego ciągu danych.
Wynika z tego, że:
(cid:141) kolumny VARCHAR zajmują mniej miejsca
na dysku;
(cid:141) kolumny CHAR są przetwarzane szybciej
niż VARCHAR, o ile nie są stosowane
typy tabel InnoDB (więcej informacji na
ten temat zamieszczono w podrozdziale
„Wybór maszyny zapisu” w dalszej
części tego rozdziału).
Trzeba przyznać, że w większości
przypadków różnica w wielkości
zajmowanego miejsca na dysku oraz
w szybkości pomiędzy oboma typami jest
niezauważalna, przez co rozważanie tego
problemu nie ma szczególnego znaczenia.
Co więcej, można czasami zauważyć, że
pomimo zdefiniowania kolumny z użyciem
jednego typu, MySQL skorzystał z drugiego.
Istnieje jeszcze jedna, mniej istotna różnica
pomiędzy omawianymi typami danych
— przed wersją 5.0.3 MySQL usuwał
nadmiarowe znaki spacji z kolumn CHAR
podczas pobierania danych, a z kolumn
VARCHAR podczas ich wstawiania. Od wersji
5.0.3 kolumny VARCHAR nie mają tej
właściwości i wszystkie dodatkowe spacje
są przechowywane.
Jako zasadę można przyjąć korzystanie
z typu VARCHAR, chyba że dana zawsze
lub niemal zawsze ma taką samą długość,
co czasami zdarza się w przypadku
identyfikatorów produktów
(SD123, PA456 itp.).
Tworzenie bazy danych MySQL
Dodatkowe
charakterystyki kolumn
Deklarując typ dla kolumny, na początku
wybieramy szeroki typ — liczba, tekst lub
data — a następnie wskazujemy dokładniejszy
typ w danej grupie. Później kolumnie można
nadać dodatkową charakterystykę. Specjalny
atrybut, AUTO_INCREMENT, jest przedstawiony
we wskazówce, ale można również korzystać
z innych, takich jak UNSIGNED, ZEROFILL, NOT
NULL oraz DEFAULT.
Typy numeryczne mogą być określane jako
UNSIGNED. Oznacza to, że w kolumnie takiej
mogą być zapisywane tylko liczby nieujemne.
W przypadku liczb całkowitych dodatkowym
efektem ubocznym jest podwojenie możliwego
zakresu wartości (dla liczb rzeczywistych tak
nie jest). Typy numeryczne mogą być również
deklarowane jako ZEROFILL, co oznacza,
że dodatkowe miejsce jest wypełniane od lewej
strony znakami zera (ZEROFILL automatycznie
powoduje zastosowanie atrybutu UNSIGNED).
Każda z kolumn może być zadeklarowana
jako NOT NULL. W przypadku tworzenia
bazy danych użycie NULL jest jednoznaczne
z poinformowaniem, że dane pole
nie przechowuje żadnej wartości (może się to
różnić od interpretacji wartości NULL w innych
kontekstach). Rozwiązaniem idealnym byłoby
oczywiście przypisanie każdemu rekordowi
bazy danych pewnej konkretnej wartości.
W rzeczywistości jednak takie sytuacje zdarzają
się rzadko. Dołączając do deklaracji typu ciąg
NOT NULL możliwe jest wymuszenie takiego
ograniczenia na danym polu.
D
o
d
a
t
k
o
w
e
c
h
a
r
a
k
t
e
r
y
s
t
y
k
i
k
o
l
u
m
n
89
Oznaczenie AUTO_INCREMENT
Jednym z atrybutów kolumny numerycznej
jest AUTO_INCREMENT. Jeżeli zdefiniujemy
pole posiadające taką właściwość,
powoduje to nadawanie przez MySQL
następnej logicznej wartości z serii. Atrybut
ten jest zwykle nadawany kolumnom klucza
głównego, takim jak Numer faktury
lub Identyfikator klienta.
Jeżeli zdefiniujemy taką kolumnę,
a podczas wstawiania wartości do tabeli
nie zostanie podana w tej kolumnie wartość,
program wstawi do niej następną logiczną
wartość. Dzięki temu pierwszy numer
faktury będzie miał wartość 1, drugi 2,
trzeci 3 itd. MySQL będzie nadawał te
wartości automatycznie.
Niektórzy mogą zastanawiać się, co się
stanie, gdy później zdecydujemy się
skasować fakturę numer 3. W numeracji
pojawi się „dziura”, ale taka sytuacja jest
całkowicie prawidłowa. Nie ma żadnego
problemu z powodu tego, że kolejne
numery faktur będą miały wartości
1, 2, 4, 5, 8… W rzeczywistości problemy
mogłyby się pojawić, jeżeli system
próbowałby „poprawić tę sytuację.
Rozdział 4.
Tworząc tabelę, można również określić wartość
domyślną dla kolumny (poza typami TEXT
i BLOB). Wtedy gdy duża część rekordów
będzie miała taką samą zawartość, wartość
domyślna pozwala uniknąć konieczności
wpisywania wszystkich wartości w czasie
wstawiania nowych wierszy, pod warunkiem,
że wartości te są równe wartości domyślnej.
Przykładem takiej deklaracji kolumny może
być:
plec ENUM( M , K ) DEFAULT K .
W tabeli 4.5 wymienione są wszystkie kolumny
z bazy finanse, wraz z ich pełną definicją.
n
m
u
l
o
k
i
k
y
t
s
y
r
e
t
k
a
r
a
h
c
e
w
o
k
t
a
d
o
D
Tabela 4.5. Do każdej z kolumn można w razie potrzeby dodać dodatkowe atrybuty
Baza danych finanse, zmodyfikowana
Tabela
Nazwa kolumny
Numer faktury
Faktury
Faktury
Klient ID
Faktury
Data wystawienia faktury
Faktury
Wartość faktury
Opis faktury
Faktury
Faktury
Termin płatności
Klienci
Klient ID
Nazwa klienta
Klienci
Klienci
Ulica klienta
Klienci
Miasto klienta
Klienci
Stan klienta
Kod pocztowy klienta
Klienci
Klienci
Telefon klienta
Klienci
Osoba kontaktowa
Klienci
Adres e-mail
Wydatek ID
Wydatki
Wydatki
Kategoria wydatku ID
Wydatki
Wartość wydatku
Wydatki
Opis wydatku
Data zapłaty
Wydatki
Kategorie wydatków TIMYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT
Kategoria wydatku ID
Kategoria wydatku
Kategorie wydatków VARCHAR(30) NOT NULL
Typ kolumny
SMALLINT(4) UNSIGNED NOT NULL AUTO_INCREMENT
SMALLINT(3) UNSIGNED NOT NULL
TIMESTAMP NOT NULL
DECIMAL(10,2) UNSIGNED NOT NULL
TINYTEXT NOT NULL
DATE
SMALLINT(3) UNSIGNED NOT NULL AUTO_INCREMENT
VARCHAR(40) NOT NULL
VARCHAR(80) NOT NULL
VARCHAR(30) NOT NULL
CHAR(2) NOT NULL
MEDIUMINT(5) UNSIGNED ZEROFILL NOT NULL
VARCHAR(14)
VARCHAR(40)
VARCHAR(60)
SMALLINT(4) UNSIGNED NOT NULL AUTO_INCREMENT
TINYINT(3) UNSIGNED NOT NULL
DECIMAL(10,2) UNSIGNED NOT NULL
TINYTEXT NOT NULL
TIMESTAMP NOT NULL
90
Tworzenie bazy danych MySQL
Gdy chcesz dostosować kolumny:
1. Wyszukaj te, które nie mogą zawierać
wartości NULL.
Jest to najważniejszy z dodatkowych
atrybutów. Każda kolumna oznaczona
jako NOT NULL zawsze musi mieć podaną
wartość. Jak się okaże przy okazji
dodawania rekordów, brak podanej
wartości w kolumnie NOT NULL powoduje
wygenerowanie błędu.
Jako zasadę należy przyjąć definiowanie
kolumny jako NOT NULL wszędzie tam, gdzie
jest to możliwe.
2. Wyszukaj kolumny numeryczne, które
powinny być oznaczone jako UNSIGNED.
Jest to bardzo łatwa operacja. Jeżeli liczba,
która znajdzie się w kolumnie, musi być
dodatnia, tak jak cena lub ilość, kolumna
powinna być oznaczona jako UNSIGNED.
Jeżeli liczba może być ujemna, jak np.
temperatura lub stan konta (niestety!),
nie należy kolumny tak oznaczać.
3. Wyszukaj kolumny numeryczne, które
powinny być oznaczone jako ZEROFILL.
Atrybut ZEROFILL jest znacznie rzadziej
wykorzystywany niż UNSIGNED, ale
w niektórych przypadkach jest niezbędny.
Niektóre kody zaczynają się od 0, tak jak
np. 02101. Jeżeli chcielibyśmy zapisać
taki kod w kolumnie całkowitej, wartość
ta zostałaby zapisana jako 2101 (ponieważ
początkowe zera nie mają znaczenia
w liczbach całkowitych). Jeżeli zdefiniujemy
kolumnę jako MEDIUMINT(5) UNSIGNED
ZEROFILL, zapisany kod zachowa
początkowe zero.
4. Wyszukaj kolumny, które powinny mieć
wartość domyślną.
Krok ten jest w zasadzie zależny
od osobistych upodobań.
D
o
d
a
t
k
o
w
e
c
h
a
r
a
k
t
e
r
y
s
t
y
k
i
k
o
l
u
m
n
91
Wskazówki
(cid:132) Zgodnie ze sztuką projektowania bazy
danych oraz zasadami funkcjonowania
MySQL klucze główne nie mogą zawierać
wartości NULL.
(cid:132) Jeżeli kolumna ENUM zostanie określona
jako NOT NULL, wówczas pierwsza
dopuszczalna wartość stanie się wartością
domyślną.
(cid:132) Istotnym jest, aby mieć świadomość,
że NULL nie jest wartością równoznaczną
z zerem, pustym ciągiem ( ) czy znakiem
spacji ( ), które to są znanymi
wartościami.
(cid:132) Trzeba wiedzieć, że MySQL w dziwny
sposób obsługuje liczby UNSIGNED. Jeżeli
wykonamy odejmowanie z co najmniej
jedną liczbą UNSIGNED, wynik zawsze
będzie UNSIGNED. Przez to odjęcie
od wartości 2 z kolumny UNSIGNED wartości
10 z kolumny SIGNED nie da w wyniku –8.
Rozdział 4.
Wprowadzenie do indeksów
Indeksy składają się na szczególny system,
wykorzystywany do poprawienia całościowej
wydajności bazy danych. Ustalając indeksy
w ramach tabeli, wskazuje się kolumny, które
są w danej tabeli ważniejsze od innych kolumn
tej samej tabeli (definicja dla laików).
MySQL pozwala na utworzenie maksymalnie
od 16 do 64 indeksów dla jednej tabeli,
w zależności od wykorzystywanej maszyny
zapisu, a każdy z nich może obejmować
do 15 kolumn. Wykorzystanie indeksów
wielokolumnowych nie musi się wydawać
takie oczywiste, jednak stają się użyteczne
w przypadku częstego przeszukiwania grupy
tych samych kolumn (np. zawierających dane
na temat imienia, nazwiska, miasta
i województwa).
W stosowaniu indeksów wskazany jest umiar.
Zwiększają one, co prawda, szybkość odczytu
danych z bazy, ale spowalniają proces ich
modyfikacji (z uwagi na fakt, że zmiany muszą
być odwzorowane także w indeksach). Z drugiej
strony, zwykle znacznie częściej odczytuje się
dane z tabeli, niż wstawia nowe rekordy
i zmienia istniejące.
Najlepszym zastosowaniem dla indeksów jest
użycie ich w kolumnach, które:
(cid:88) są często wykorzystywane w części WHERE
zapytań;
(cid:88) są często wykorzystywane w części ORDER
BY zapytań;
(cid:88) cechują się różnorodnością wartości
(kolumny, w których wartości powtarzają
się wielokrotnie nie powinny być
indeksowane).
(cid:88) są często stosowane w wyrażeniach JOIN.
w
ó
s
k
e
d
n
i
o
d
e
i
n
e
z
d
a
w
o
r
p
W
92
Tabela 4.6. W celu zwiększenia wydajności baza
danych została wzbogacona o kilka (choć nie jest
ich zbyt wiele) indeksów, które pozwolą jej
na efektywniejsze pobieranie przechowywanych
informacji
Indeksy bazy danych finansów
Kolumna
Numer faktury
Klient ID
Data wystawienia
faktury
Faktury
Wartość faktury
Faktury
Termin płatności
Klienci
Klient ID
Klienci
Nazwa klienta
Wydatek ID
Wydatki
Kategoria wydatku ID Wydatki
Wartość wydatku
Wydatki
Data zapłaty
Wydatki
Kategoria wydatku ID Kategorie
wydatków
Kategorie
wydatków
INDEX
INDEX
PRIMARY KEY
INDEX (lub UNIQUE)
PRIMARY KEY
INDEX
INDEX
INDEX
PRIMARY KEY
Kategoria wydatku
Tabela
Faktury
Faktury
Faktury
Typ indeksu
PRIMARY KEY
INDEX
INDEX
UNIQUE
W MySQL wyróżnia się kilka typów indeksów:
INDEX, UNIQUE (narzucający konieczność
wprowadzania unikatowej wartości w każdym
wierszu) oraz PRIMARY KEY (będący szczególną
postacią indeksu UNIQUE). Dostępny jest również
indeks FULLTEXT, który jest opisany w rozdziale
10., „SQL i MySQL dla zaawansowanych”.
Propozycje indeksów dla bazy danych finanse
zestawiono w tabeli 4.6.
Tworzenie bazy danych MySQL
W celu dodania indeksu:
1. Wyszukaj wszystkie kolumny, które
powinny być oznaczone jako PRIMARY KEY.
Powinno być to oczywiste szczególnie
wtedy, jeżeli wykonałeś operacje
normalizacji opisaną w poprzednim
rozdziale. Należy pamiętać, że może istnieć
tylko jeden klucz główny w tabeli (choć
możliwe jest tworzenie złożonego klucza
głównego składającego się z wielu kolumn).
2. Wyszukaj wszystkie kolumny, których
wartości muszą być zawsze unikalne.
Również indeks UNIQUE nie jest
wykorzystywany zbyt często. Większość
wartości — daty, liczby, nazwy, miasta,
kody pocztowe — mogą się powtarzać,
szczególnie w tabelach zawierających
tysiące wierszy. Jednak czasami okazuje
się, że kolumna musi zawierać unikalne
wartości, np. adres e-mail, nazwa
użytkownika (w przypadku systemów
do rejestracji lub logowania) lub też pole
Kategoria wydatku w tabeli Kategorie
wydatków.
Nie ma potrzeby definiowania kolumn
PRIMARY KEY jako UNIQUE, ponieważ
oznaczenie PRIMARY KEY również powoduje
unikalność.
3. Wyszukaj wszystkie pozostałe kolumny,
które powinny skorzystać z indeksu.
Skorzystaj z wcześniejszych zaleceń
na temat miejsc, w których warto tworzyć
indeksy i pomyśl jakie dane będą
odczytywane. Jeżeli potrzebna będzie
lista faktur w zakresie dat lub całkowita
wartość zamówienia, utwórz indeksy
w logiczny sposób. Jeżeli tabela rejestracji
i logowania będzie przeszukiwana
z użyciem połączenia nazwy użytkownika
i hasła, w taki sam sposób powinna być
poindeksowana. Powinno się również
indeksować klucze obce.
93
W
p
r
o
w
a
d
z
e
n
i
e
d
o
i
n
d
e
k
s
ó
w
Wskazówka
(cid:132) Indeksy stosowane w kolumnach o zmiennej
długości cechuje mniejsza wydajność.
Ogólnie, stosowanie pól, których długość
nie jest stała, spowalnia pracę MySQL.
Można to skompensować indeksując
tylko część ciągu o zmiennej długości,
np. pierwsze pięć lub dziesięć znaków.
u
t
k
e
j
o
r
p
p
a
t
e
y
w
o
c
ń
o
K
Rozdział 4.
Końcowy etap projektu
Ostatnim etapem projektowania bazy danych
jest zastosowanie odpowiedniej konwencji
nazewnictwa. Co prawda, MySQL nie narzuca
zasad nazywania baz danych, tabel czy kolumn,
istnieją jednak pewne sprawdzone reguły,
których należy przestrzegać (zasady wymagane
są zaznaczone pogrubieniem):
(cid:88) używanie znaków alfanumerycznych;
(cid:88) nie korzystanie ze spacji;
(cid:88) ograniczenie maksymalnej długości
nazw do 64 znaków;
(cid:88) nazwy pól powinny mieć charakter opisowy;
(cid:88) nazwy pól, z wyjątkiem kluczy, powinny
być unikatowe w obrębie wszystkich
tabel;
(cid:88) nie należy korzystać ze słów kluczowych
MySQL;
(cid:88) używanie znaków podkreślenia (_) w celu
rozdzielania wyrazów;
(cid:88) korzystanie tylko z małych liter (choć nie
jest to rzecz obowiązkowa);
(cid:88) używanie liczby mnogiej w oznaczaniu
tabel i pojedynczej w definiowaniu kolumn;
(cid:88) dołączanie id (lub ID) do nazw kolumn
kluczy głównych i obcych;
(cid:88) umieszczanie kluczy głównych
w początkowej części tabeli, a w dalszej
kolejności kluczy obcych.
Zamieszczone powyżej reguły mają jedynie
charakter zalecenia, ich przestrzeganie, poza
koniecznością posługiwania się znakami
alfanumerycznymi bez znaków spacji, nie jest
zatem obowiązkowe. Część programistów
preferuje używanie wielkich liter
do rozdzielania wyrazów (zamiast znaku
podkreślenia). Inni z kolei uwzględniają
w nazwie kolumny jej typ. Najistotniejsze jest
jednak to, by przestrzegać ustalonej konwencji.
94
Tworzenie bazy danych MySQL
Ostateczny projekt bazy danych przedstawiono
w tabeli 4.7, który otrzymamy po wykonaniu
kolejnych kroków.
W celu dokończenia projektowania
bazy danych:
1. Określ nazwę całej bazy danych.
Powinna być ona łatwa do zapamiętania
i opisowa. Nazwa bazy danych również
musi być unikalna, ponieważ na jednym
serwerze MySQL nie mogą istnieć bazy
danych o takich samych nazwach.
Przykładowo w tym i poprzednim rozdziale
korzystaliśmy z bazy finanse. Można ją
również nazwać Finanse, ale osobiście
preferuję nazwy zawierające tylko małe
litery.
Tabela 4.7. Ostatni etap projektu polega na zastosowaniu odpowiedniej konwencji nazewnictwa oraz
uporządkowania kolumn w tabelach
Baza danych finanse
Nazwa kolumny
faktura_id
klient_id
data_faktury
wartosc_faktury
opis_faktury
data_platnosci
klient_id
nazwa_klienta
ulica_klienta
miasto_klienta
stan_klienta
kod_pocztowy_klienta
telefon_klienta
osoba_kontaktowa
email_kontaktowy
wydatek_id
kategoria_wydatku_id
wartosc_wydatku
opis_wydatku
data_zaplaty
kategoria_wydatku_id
kategoria_wydatku
Typ kolumny
SMALLINT(4) UNSIGNED NOT NULL AUTO_INCREMENT
SMALLINT(3) UNSIGNED NOT NULL
TIMESTAMP NOT NULL
DECIMAL(10,2) UNSIGNED NOT NULL
TINYTEXT NOT NULL
DATE
SMALLINT(3) UNSIGNED NOT NULL AUTO_INCREMENT
VARCHAR(40) NOT NULL
VARCHAR(80) NOT NULL
VARCHAR(30) NOT NULL
CHAR(2) NOT NULL
MEDIUMINT(5) UNSIGNED ZEROFILL NOT NULL
VARCHAR(14)
VARCHAR(40)
VARCHAR(60)
SMALLINT(4) UNSIGNED NOT NULL AUTO_INCREMENT
TINYINT(3) UNSIGNED NOT NULL
DECIMAL(10,2) UNSIGNED NOT NULL
TINYTEXT NOT NULL
TIMESTAMP NOT NULL
TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT
VARCHAR(30) NOT NULL
Tabela
faktury
faktury
faktury
faktury
faktury
faktury
klienci
klienci
klienci
klienci
klienci
klienci
klienci
klienci
klienci
wydatki
wydatki
wydatki
wydatki
wydatki
wydatki_kategorie
wydatki_kategorie
95
K
o
ń
c
o
w
y
e
t
a
p
p
r
o
j
e
k
t
u
u
t
k
e
j
o
r
p
p
a
t
e
y
w
o
c
ń
o
K
Rozdział 4.
2. Określ nazwę każdej tabeli.
Należy pamiętać, że powinny być one
łatwe do zapamiętania i opisowe.
Dodatkowo, w jednej bazie danych nie
mogą istnieć dwie tabele o takich samych
nazwach (tabele w różnych bazach mogą
mieć te same nazwy). Zdecydowałem się
na tabele faktury, klienci, wydatki
i wydatki _kategorie.
3. Nadaj nazwę każdej kolumnie w każdej
tabeli.
W tym przypadku można spotkać się
z wieloma wariantami, ponieważ każdy
ma swój styl. Jak wspomniałem, do kolumn
kluczy głównych i obcych dodałem frazę
_id. Jeżeli w tabeli znajduje się pole
z datą, w jej nazwie umieszczam frazę data.
4. Uporządkuj kolumny w każdej z tabel.
Wyniki tego kroku zależą bardziej od
własnej organizacji niż innych względów.
Kolejność kolumn nie ma żadnego wpływu
na działanie tabeli lub bazy danych.
Osobiście umieszczam kolumny klucza
głównego na początku, a następnie układam
klucze obce.
Wskazówki
(cid:132) Jeżeli związanym tabelom zostaną nadane
nazwy rozpoczynające się tak samo,
to gdy wyświetlimy listę tabel, będą one
wyświetlane razem. Przykładem są tabele
wydatki i wydatki_kategorie, które
na rysunku 4.1 są wyświetlane razem).
(cid:132) W nazwach baz danych i tabel są
rozpoznawane wielkie i małe litery
w systemach typu Unix, a w Windows
nie. W nazwach kolumn wielkie i małe
litery są zawsze ignorowane.
(cid:132) Ściśle stosując się do zasad projektowania
bazy danych, minimalizujemy liczbę
błędów, jakie mogą powstać przy
programowaniu interfejsu bazy danych.
96
Rysunek 4.1. Tabele są wyświetlane w porządku
alfabetycznym; można z tego skorzystać, nadając
związanym tabelom podobne nazwy
(cid:132) Technicznie rzecz biorąc, można korzystać
z istniejących słów kluczowych w nazwach
tabel i kolumn. Jednak w celu odwołania
się do nich zawsze należy umieszczać te
nazwy we wstecznych apostrofach:
SELECT * FROM `table`
Jednak najlepiej nie korzystać z istniejących
słów kluczowych.
Tworzenie bazy danych MySQL
Wybór maszyny zapisu
Serwer bazy danych MySQL obsługuje kilka
różnych typów tabel (typ tabeli określa również
typ maszyny zapisu). Choć każdy z typów
obsługuje różny zbiór funkcji, sposób ich
pracy — mówimy tu o wykonywaniu zapytań
— jest właściwie spójny. W tym miejscu
krótko omówię trzy główne typy tabel; wraz
z postępami poznawania MySQL będziesz
mógł zapoznać się ze wszystkimi szczegółami
opisanymi w podręczniku.
Najważniejszym typem tabel jest MyISAM.
Tabele tego typu doskonale nadają się dla
większości aplikacji, ponieważ bardzo szybko
wykonują operacje SELECT i INSERT. Jednak
maszyna zapisu MyISAM nie obsługuje
transakcji, o których będzie mowa
w rozdziale 10.
Kolejnymi popularnymi typami tabel są InnoDB
oraz MEMORY (czasami nazywany HEAP).
Od wersji 4.0 tabele InnoDB wchodzą w skład
domyślnej instalacji MySQL (jeżeli korzystasz
z wcześniejszej wersji serwera, musisz włączyć
obsługę InnoDB; więcej informacji na ten temat
można znaleźć w podręczniku). Tabele InnoDB
mogą być wykorzystywane w transakcjach
i elegancko obsługują operacje UPDATE. Jednak
maszyna InnoDB jest wolniejsza niż MyISAM
i wymaga większej ilości miejsca na dysku.
Typ tabel MEMORY pozwala na najszybsze
wykonywanie operacji, ponieważ takie tabele
przechowują dane w pamięci, a nie na dysku.
Jest to jednak okupione ograniczeniami,
ponieważ tabele MEMORY obsługują tylko
kolumny o stałej szerokości, nie można
korzystać z atrybutu AUTO_INCREMENT
i w czasie awarii traci się wszystkie dane.
W
y
b
ó
r
m
a
s
z
y
n
y
z
a
p
i
s
u
97
Rozdział 4.
W celu wybrania maszyny zapisu:
1. Zaloguj się do klienta mysql.
Aby wybrać maszynę zapisu, należy
najpierw sprawdzić, jakie opcje są dostępne.
W tym celu należy odpytać serwer MySQL,
do którego podłączył się program mysql
(instrukcje specyficzne dla platformy
można znaleźć w rozdziale 2.,
„Uruchamianie MySQL”).
2. Sprawdź, jakie maszyny zapisu są
obsługiwane przez dany serwer MySQL,
uruchamiając następujące zapytanie
(rysunek 4.2):
SHOW ENGINES;
Wyniki będą inne w różnych instalacjach
MySQL. Krok ten warto wykonać,
ponieważ nie ma sensu próbować
użyć niedostępnej maszyny zapisu.
3. Określ, czy potrzebujesz transakcji.
Transakcje są bezpieczniejsze, ponieważ
pozwalają wycofać zmiany i chronią dane
w przypadku awarii. Jednak tabele
nietransakcyjne działają szybciej oraz
wymagają mniej pamięci operacyjnej
i dyskowej.
Jako zasadę należy przyjąć, że jeżeli
transakcje są potrzebne, należy skorzystać
z InnoDB. Jeżeli nie, najlepiej wybrać
MyISAM.
u
s
i
p
a
z
y
n
y
z
s
a
m
r
ó
b
y
W
Rysunek 4.2. Lista dostępnych maszyn zapisu w jednej z instalacji MySQL
98
Tworzenie bazy danych MySQL
4. Określ, czy możesz poświęcić wydajność
na rzecz trwałości.
Jeżeli wybrana tabela musi być obsługiwana
naprawdę szybko, to prawdopodobnie
najlepszym typem będzie MEMORY.
Interakcja z taką tabelą jest naprawdę bardzo
szybka, ale w przypadku awarii tracimy
wszystkie dane!
Wskazówki
(cid:132) Ta sama baza danych może zawierać tabele
różnych typów. Baza danych do obsługi
handlu elektronicznego może korzystać
z tabel MyISAM do przechowywania
danych klientów i produktów,
ale do zamówień może używać tabel
InnoDB (w celu wykorzystania transakcji).
(cid:132) Dwoma innymi popularnymi typami tabel
są MERGE oraz BDB (Berkeley Database).
Pierwszy z typów pozwala na traktowanie
wielu tabel MyISAM jak jednej. Drugi jest
alternatywą dla InnoDB i również obsługuje
transakcje.
(cid:132) Maszyna zapisu InnoDB została zakupiona
przez firmę Oracle, konkurencyjną firmę
z rynku baz danych. Oracle kupił również
firmę Sleepycat Software, w której powstała
maszyna zapisu BDB. Jeszcze nie wiadomo,
jak to wpłynie na MySQL, ale możliwe
jest, że w przyszłych wersjach obie maszyny
znikną. Jest to jeden z powodów, dla którego
warto sprawdzać, jakie maszyny zapisu są
dostępne, wykonując zapytanie SHOW
ENGINES (dostępne od MySQL 4.0).
(cid:132) Każda maszyna zapisu posiada inne
właściwości, takie jak maksymalna liczba
obsługiwanych indeksów, typy kolumn,
dla których można zakładać indeksy,
maksymalna wielkość tabel (określana
jako wielkość na serwerze) itd. Jeżeli
rozpoczniesz korzystanie z MySQL
na tak wysokim poziomie, konieczne
będzie zapoznanie się z podręcznikiem.
99
W
y
b
ó
r
m
a
s
z
y
n
y
z
a
p
i
s
u
(cid:132) Jeżeli będziesz próbował utworzyć tabelę,
korzystając z maszyny zapisu niedostępnej
w danej wersji MySQL, zostanie
zastosowana domyślna maszyna zapisu
dla tego serwera.
Rozdział 4.
Zestawy znaków
i sposoby sortowania
W czasie tworzenia tabel, oprócz wyboru
maszyny zapisu, należy określić zestaw znaków
i sposób sortowania. Oba te parametry
wpływają na obsługę tekstu przez MySQL.
Są to dosyć nowe możliwości, ponieważ
wyraźnie zaistniały w wersji MySQL 4.1
(były we wcześniejszych wersjach MySQL,
ale nie w tak formalnej postaci).
Zestaw znaków określa sposób zapisu liter,
cyfr i symboli w kolumnach tekstowych
(odnosi się tylko do typów tekstowych).
Aby określić zestaw znaków dla określonej
kolumny, należy do definicji tej kolumny
dodać frazę CHARACTER SET nazwa_zestawu,
gdzie nazwa_zestawu określa wybrany zestaw
znaków. W celu sprawdzenia dostępnych
zestawów znaków można użyć polecenia SHOW
CHARACTER SET w kliencie mysql. Domyślnym
zestawem znaków jest latin1, który obejmuje
język angielski i inne języki
zachodnioeuropejskie, ale dostępne są również
zestawy dla alfabetów środkowoeuropejskich,
greki, cyrylicy, języka chińskiego, koreańskiego
i innych. W czasie pisania tej książki MySQL
obsługiwał ponad 70 zestawów znaków!
Pokrewnym pojęciem jest sposób sortowania,
który określa zasady porównywania znaków.
Przykładowo sposób sortowania bez
rozróżniania wielkości znaków identycznie
traktuje małe i wielkie litery. Inny może
określać sposób sortowania znaków z ogonkami
i kropkami w języku polskim. Każdy zestaw
znaków posiada zbiór skojarzonych sposobów
sortowania. Dla zestawu znaków latin1
domyślnym sposobem sortowania
jest latin1_swedish_ci. Choć może się
to wydawać dziwne, jest to doskonałe
połączenie do obsługi języka angielskiego
i większości języków zachodnich.
a
i
n
a
w
o
t
r
o
s
y
b
o
s
o
p
s
i
w
ó
k
a
n
z
y
w
a
t
s
e
Z
100
Tworzenie bazy danych MySQL
W celu wybrania zestawu znaków
i sortowania:
1. Zaloguj się do klienta mysql.
Podobnie jak w przypadku maszyn zapisu,
na początek należy sprawdzić, jakie mamy
dostępne opcje. W tym celu należy odpytać
serwer MySQL, do którego podłączył się
program mysql (instrukcje specyficzne dla
platformy można znaleźć w rozdziale 2.).
2. Sprawdź, jakie zestawy znaków są
obsługiwane przez daną wersję MySQL,
uruchamiając zapytanie (rysunek 4.3):
SHOW CHARACTER SET;
Wyniki będą różniły się w różnych
instalacjach MySQL. W mojej instalacji
MySQL 5.0.18 w systemie Windows
dostępne jest 36 zestawów znaków.
Z
e
s
t
a
w
y
z
n
a
k
ó
w
i
s
p
o
s
o
b
y
s
o
r
t
o
w
a
n
i
a
Rysunek 4.3.Część listy dostępnych zestawów znaków
101
Wskazówki
(cid:132) Zarówno zestaw znaków, jak i sposób
sortowania mogą być ustalone na poziomie
serwera, bazy danych, tabeli lub kolumny.
Jeżeli nie zostanie określony zestaw znaków
lub sposób sortowania dla kolumny, zostaną
użyte parametry dla tabeli. To samo odnosi
się do tabel (które korzystają z wartości
domyślnych bazy danych) oraz baz danych
(korzystających z ustawień serwera).
(cid:132) Można również ustawić zestaw znaków
dla sesji interakcyjnej dla połączenia
z serwerem MySQL (np. gdy korzystamy
z klienta mysql). Informacje na ten temat
można znaleźć w podręczniku MySQL.
(cid:132) Sposób sortowania można zmienić
w zapytaniu. Ma to wpływ
na porządkowanie i grupowanie wyników
działania tylko tego jednego zapytania.
Rozdział 4.
3. Wybierz zestaw znaków do wykorzystania.
Zestaw znaków powinien opowiadać
językom i typom znaków, jakie mają
być zapisywane w bazie danych. Można
również wybrać inny zestaw znaków dla
każdej kolumny, jeżeli aplikacja wymaga,
aby w jednej kolumnie tekst był zapisywany
po polsku, a w drugiej po tajsku.
4. Sprawdź, jakie sposoby sortowania są
dostępne dla wybranego zestawu znaków
przez uruchomienie następującego
zapytania (rysunek 4.4):
SHOW COLLATION LIKE latin1
Aby znaleźć możliwe sposoby sortowania
dla wybranego zestawu znaków, należy
uruchomić to zapytanie. Trzeba zmienić
latin1 na używany zestaw znaków.
5. Wybierz sposób sortowania.
W liście wyświetlanej przez MySQL
(rysunek 4.4) należy wyszukać domyślny
sposób sortowania oraz sprawdzić, które
sposoby są wkompilowane (czyli inaczej
mówiąc, obsługiwane). Następnie, jeżeli
stwierdzisz, że potrzebujesz innego sposobu
niż domyślny, przeczytaj w podręczniku,
jak zmienić sposób sortowania i wykonaj
odpowiednią operację.
a
i
n
a
w
o
t
r
o
s
y
b
o
s
o
p
s
i
w
ó
k
a
n
z
y
w
a
t
s
e
Z
Rysunek 4.4. Lista dostępnych sposobów sortowania dla jednego wybranego
zestawu znaków
102
Tworzenie bazy danych MySQL
Tworzenie baz danych
Gdy przejdziemy przez wszystkie kroki
projektowania i ostatecznego budowania
projektu bazy danych (wymaga to zaskakująco
dużo pracy), przyjdzie czas na utworzenie bazy
danych w MySQL. W celu wykreowania bazy
danych oraz tabel skorzystamy z klienta mysql
oraz prostych instrukcji SQL.
W rozdziale 2., „Uruchamianie MySQL”,
szybko zdefiniowałem dwie bazy danych
na potrzeby zademonstrowania, jak dodajemy
użytkowników. Składnia polecenia tworzącego
nową bazę danych wygląda zatem następująco:
CREATE DATABASE nazwa_bazy_danych
Aby określić zbiór znaków oraz sposób
sortowania dla całej bazy danych, należy
na końcu instrukcji CREATE dodać dodatkową
klauzulę:
CREATE DATABASE nazwa_bazy_danych CHARACTER
(cid:170)SET nazwa_zestawu COLLATE
(cid:170)nazwa_sposobu_sort
W celu zademonstrowania instrukcji CREATE
utworzymy teraz bazę danych finanse.
Aby utworzyć bazę danych:
1. Zaloguj się do klienta mysql.
Jeżeli jeszcze nie wiesz, jak to zrobić,
potrzebne wskazówki możesz znaleźć
w rozdziale 2., „Uruchamianie MySQL”.
Należy się zalogować jako użytkownik
mający uprawnienia do tworzenia nowych
baz danych.
2. Utwórz i wybierz nową bazę danych
(rysunek 4.5).
CREATE DATABASE finanse;
Jak już wcześniej widzieliśmy, ten jeden
wiersz kodu powoduje utworzenie bazy
danych (zakładamy, że jesteśmy zalogowani
do mysql jako użytkownik z uprawnieniami
do tworzenia baz danych).
103
T
w
o
r
z
e
n
i
e
b
a
z
d
a
n
y
c
h
Rysunek 4.5. Tworzenie nowej bazy danych
Dodatkowo, choć SQL nie rozróżnia
wielkości liter, przyzwyczaiłem się
do pisania słów kluczowych SQL wielkimi
literami, co pomaga oddzielić je od nazw
baz danych, tabel i kolumn. Jeżeli nie
chcesz pisać tych słów wielkimi literami,
nie jest to obowiązkowe.
Rozdział 4.
3. Potwierdź istnienie bazy danych
(rysunek 4.6):
SHOW DATABASES;
Polecenie SHOW, które nie musi być
szczegółowo omawiane, wyświetla listę
baz danych, do których ma dostęp
zalogowany użytkownik.
Wskazówki
(cid:132) Bazy danych można również tworzyć,
korzystając z aplikacji mysqladmin. Za jej
pomocą nie można jednak kreować tabel.
mysqladmin -u root -p create
(cid:170)nazwa_bazy_danych
(cid:132) Przy użyciu polecenia SHOW CREATE można
zawsze sprawdzić, w jaki sposób została
utworzona istniejąca baza danych
(rysunek 4.7):
SHOW CREATE DATABASE nazwa_bazy_danych
h
c
y
n
a
d
z
a
b
e
i
n
e
z
r
o
w
T
Rysunek 4.6. Nowo utworzona baza finanse jest
wyświetlana w liście baz danych
Rysunek 4.7. Zapytanie SHOW CREATE pokazuje sposób, w jaki została utworzona
baza danych lub tabela. Zwróćmy uwagę, że w tym przykładzie wyświetlany jest
komentarz dla wersji 4.01.00 (i wyższych) odnoszący się do domyślnego zestawu
znaków
104
Tworzenie bazy danych MySQL
Tworzenie tabel
Gdy mamy już bazę danych, można rozpocząć
tworzenie tabel za pomocą polecenia CREATE:
CREATE TABLE nazwa_tabeli (
nazwa_kolumny1 opis,
nazwa_kolumny2 opis…
)
Łatwo zauważyć, że po podaniu nazwy tabeli
należy w nawiasie kolejno zdefiniować
kolumny. Każda kolumna i opis powinny być
oddzielone przecinkiem. Jeżeli chcemy
od razu utworzyć indeksy, na końcu instrukcji
tworzenia można dodać odpowiednią klauzulę
(można również utworzyć indeksy później).
CREATE TABLE nazwa_tabeli (
nazwa_kolumny1 opis,
nazwa_kolumny2 opis,
typ_indeksu(kolumny)
)
Jeżeli chcemy nazwać tworzone indeksy, należy
zmienić tę część zapytania na:
nazwa_indeksu (kolumny)
Aby w czasie tworzenia tabeli określić maszynę
zapisu, należy na końcu instrukcji tworzącej
tabelę dodać klauzulę:
CREATE TABLE nazwa_tabeli (
nazwa_kolumny1 opis,
nazwa_kolumny2 opis…
) ENGINE = INNODB
W wersjach wcześniejszych niż 4.0.18 należało
korzystać ze słowa kluczowego TYPE zamiast
ENGINE. Jeżeli w czasie tworzenia tabel nie
zostanie podana maszyna zapisu, MySQL użyje
domyślnego typu tabel (InnoDB w Windows,
w innych systemach MyISAM).
T
w
o
r
z
e
n
i
e
t
a
b
e
l
105
Rozdział 4.
Aby określić zestaw znaków lub sposób
sortowania dla całej tabeli, należy na końcu
zapytania CREATE dodać odpowiednią klauzulę:
CREATE TABLE nazwa_tabeli (
nazwa_kolumny1 opis,
nazwa_kolumny2 opis…
) ENGINE = MyISAM CHARACTER SET
(cid:170)nazwa_zestawu COLLATE
nazwa_sposobu_sortowania
Teraz utwórzmy cztery tabele składające się
na bazę danych finanse.
Rysunek 4.8. Pierwszymi wykonanymi operacjami
jest zalogowanie się do mysql i wybranie bazy finanse
Rysunek 4.9. Klient mysql pozwala na wprowadzanie
poleceń zajmujących kilka linii, co sprawia, że dłuższe
zapytania SQL są czytelniejsze
l
e
b
a
t
e
i
n
e
z
r
o
w
T
W celu utworzenia tabel:
1. Otwórz klienta mysql i wybierz bazę finanse
(rysunek 4.8).
USE finanse;
Tworzenie tabel będzie łatwiejsze, jeżeli
wcześniej zostanie wybrana baza danych.
Trzeba zalogować się jako użytkownik
z uprawnieniami do tworzenia tabel w tej
bazie danych.
2. Utwórz tabelę faktury (rysunek 4.9).
CREATE TABLE faktury (
faktura_id SMALLINT(4) UNSIGNED NOT
(cid:170)NULL AUTO_INCREMENT,
klient_id SMALLINT(3) UNSIGNED NOT NULL,
data_faktury TIMESTAMP NOT NULL,
wartosc_faktury DECIMAL(10,2) UNSIGNED
(cid:170)NOT NULL,
opis_faktury TINYTEXT NOT NULL,
data_platnosci DATE,
PRIMARY KEY (faktura_id),
INDEX (klient_id),
INDEX (data_faktury),
INDEX (wartosc_faktury),
INDEX (data_platnosci)
);
106
Rysunek 4.10. MySQL informuje o poprawnym
wykonaniu polecenia za pomocą komunikatu
Query OK
Tworzenie bazy danych MySQL
Przedstawione polecenie CREATE
wykorzystuje dane dotyczące tabeli faktury,
które zostały opracowane we wcześniejszej
części rozdziału. Kolejność wprowadzania
kolumn determinuje sposób ich
rozmieszczenia w tabeli. Po utworzeniu
samych kolumn określono również związane
z nimi indeksy, dzięki temu będą one
istniały natychmiast po utworzeniu tabeli.
Z uwagi na fakt, że monitor mysql nie
prześle zapytania, zanim nie napotka znaku
średnika, wprowadzane polecenie może
zajmować kilka linii, podobnie jak ma
to miejsce w sytuacji zaprezentowanej
na rysunku 4.9.
3. Utwórz tabelę klienci (rysunek 4.10).
CREATE TABLE klienci (
klient_id SMALLINT(3) UNSIGNED NOT
(cid:170)NULL AUTO_INCREMENT,
nazwa_klienta VARCHAR(40) NOT NULL,
ulica_klienta VARCHAR(80) NOT NULL,
miasto_klienta VARCHAR(30) NOT NULL,
stan_klienta VARCHAR(2) NOT NULL,
kod_pocztowy_klienta MEDIUMINT(5)
(cid:170)UNSIGNED ZEROFILL NOT NULL,
telefon_klienta VARCHAR(14),
osoba_kontaktowa VARCHAR(40),
email_kontaktowy VARCHAR(60),
PRIMARY KEY (klient_id),
INDEX (nazwa_klienta)
);
Tabela ta posiada więcej kolumn, ale tylko
dwa indeksy.
T
w
o
r
z
e
n
i
e
t
a
b
e
l
107
Rozdział 4.
4. Utwórz tabelę wydatki (rysunek 4.11).
CREATE TABLE wydatki (
wydatek_id SMALLINT(4) UNSIGNED NOT
(cid:170)NULL AUTO_INCREMENT,
kategoria_wydatku_id TINYINT(3)
(cid:170)UNSIGNED NOT NULL,
wartosc_wydatku DECIMAL(10,2)
(cid:170)UNSIGNED NOT NULL,
opis_wydatku TINYTEXT NOT NULL,
data_zaplaty TIMESTAMP NOT NULL,
PRIMARY KEY (wydatek_id),
INDEX (kategoria_wydatku_id),
INDEX (wartosc_wydatku),
INDEX (data_zaplaty)
);
5. Na koniec utwórz tabelę wydatki_kategorie
(rysunek 4.12).
CREATE TABLE wydatki_kategorie (
kategoria_wydatku_id TINYINT(3)
(cid:170)UNSIGNED NOT NULL AUTO_INCREMENT,
kategoria_wydatku VARCHAR(30) NOT NULL,
PRIMARY KEY (kategoria_wydatku_id),
UNIQUE (kategoria_wydatku)
);
To najprostsza z przedstawionych czterech
tabel, ponieważ posiada tylko dwie kolumny
i dwa indeksy.
l
e
b
a
t
e
i
n
e
z
r
o
w
T
Rysunek 4.11. Tworzenie trzeciej tabeli
Rysunek 4.12. Tworzenie czwartej i ostatniej tabeli
108
Tworzenie bazy danych MySQL
6. Sprawdź, czy tabele zostały utworzone
(rysunek 4.13).
SHOW TABLES;
SHOW COLUMNS FROM faktury;
Polecenie SHOW (ang. pokaż) powoduje
wyświetlenie tabel bazy danych lub nazw
kolumn tabeli i ich typów.
Wskazówki
(cid:132) Wymieniane w innych publikacjach
polecenie DESCRIBE nazwa_tabeli jest
tożsame z instrukcją SHOW COLUMNS FROM
nazwa_tabeli.
(cid:132) Można również wykonać zapytanie SHOW
CREATE TABLE nazwa_tabeli, aby sprawdzić,
za pomocą jakiego polecenia została
utworzona tabela.
(cid:132) Jeżeli wykonamy zapytanie SHOW CREATE
TABLE nazwa_tabeli po utworzeniu tabeli,
możemy zweryfikować sposób, w jaki
MySQL implementuje nasze wyrażenie.
Operacja ta pozwala sprawdzić, jak MySQL
zmienia typy kolumn ze względów
wydajnościowych.
T
w
o
r
z
e
n
i
e
t
a
b
e
l
Rysunek 4.13. Gdy chcesz sprawdzić istnienie i strukturę bazy danych, należy posłużyć się
poleceniem SHOW. Nie daj się zaskoczyć przez wyniki działania tego polecenia. MySQL posiada
własny sposób opisu tabeli, który może różnić się od tego, w jaki sposób została ona utworzona
109
Rozdział 4.
Modyfikacja tabel
Ostatnim tematem, jaki przedstawimy w tym
rozdziale, jest modyfikacja istniejących tabel.
Można to wykonywać z dowolnych powodów,
ale przed wprowadzeniem zmian należy
pomyśleć o wszystkich zasadach normalizacji,
indeksach, konwencjach nazewnictwa i tego
typu elementach. Bardzo łatwo zaprzepaścić
całą pracę włożoną w planowanie przez
wprowadzenie do bazy danych „niewielkiej
poprawki”.
Podstawową instrukcją SQL, służącą
do modyfikowania struktury tabel w bazie
danych, jest ALTER. Zazwyczaj wiąże się ona
z procesem dodawania, usuwania lub
przekształcania kolumn, choć pozwala
również na zmianę nazwy tabeli oraz zmianę
kluczy i indeksów. Umożliwia ona również
zmianę nazwy całej tabeli i modyfikowanie
indeksów. Podstawową składnią ALTER jest:
ALTER TABLE nazwa_tabeli KLAUZULE
Ze względu na mnogość dostępnych klauzul
zostały one zestawione w tabeli 4.8. Pełna ich
lista znajduje się w dodatku B, „Przegląd SQL
i MySQL”.
l
e
b
a
t
a
j
c
a
k
i
f
y
d
o
M
Tabela 4.8. Polecenie SQL ALTER można wykorzystywać do modyfikowania tabeli na wiele sposobów
Klauzule ALTER TABLE
Klauzula
ADD COLUMN
Użycie
ALTER TABLE nazwa_tabeli ADD COLUMN nazwa_kolumny
typ_kolumny
ALTER TABLE nazwa_tabeli CHANGE COLUMN nazwa_kolumny
nowa_nazwa_kolumny nowy_typ_kolumny
ALTER TABLE nazwa_tabeli DROP COLUMN nazwa_kolumny
Znaczenie
Umieszcza na końcu tabeli
nową kolumnę.
Pozwala na zmianę typu
i właściwości kolumny.
Usuwa kolumnę z tabeli
wraz z jej danymi.
Dodaje nowy indeks dla
danej kolumny.
Usuwa istniejący indeks.
Zmienia nazwę tabeli.
CHANGE COLUMN
DROP COLUMN
ADD INDEX
DROP INDEX
RENAME AS
ALTER TABLE nazwa_tabeli ADD INDEX nazwa_indeksu
(nazwa_kolumny)
ALTER TABLE nazwa_tabeli DROP INDEX nazwa_indeksu
ALTER TABLE nazwa_tabeli RENAME AS nowa_nazwa_tabeli
110
Rysunek 4.14. Do zmiany nazwy lub typu kolumny
służy polecenie ALTER TABLE nazwa_kolumny
CHANGE COLUMN
Tworzenie bazy danych MySQL
W celu zademonstrowania zasad posługiwania
się poleceniem ALTER pole osoba_kontaktowa
tabeli klienci zostanie rozdzielone na dwie
kolumny (zgodne z założeniami normalizacji)
osoba_kontaktowa_imie
i osoba_kontaktowa_nazwisko. W tym
przykładzie zakładam, że w tabeli nie ma
jeszcze żadnych danych. Jeżeli w tabeli
znajdowałyby się dane, trzeba by wziąć to
pod uwagę (dodać dwie kolumny, przenieść
do nich istniejące dane i skasować kolumnę
źródłową). Ponieważ polecenie ALTER
powoduje w tabeli znaczne zmiany, powinno
się zawsze wykonać kopię tabeli przed
rozpoczęciem jej modyfikacji (rozdział 13.).
Gdy chcesz zmienić strukturę tabeli:
1. Otwórz klienta mysql i wybierz bazę finanse,
o ile wcześniej tego nie zrobiłeś.
USE finanse;
2. Zmień nazwę pola osoba_kontaktowa
(rysunek 4.14).
ALTER TABLE klienci CHANGE COLUMN
(cid:170)osoba_kontaktowa osoba_kontaktowa_imie
(cid:170)VARCHAR(15);
Powyższe polecenie zmienia jedynie nazwę
i typ danych kolumny osoba_kontaktowa.
Od tej chwili nazwą pola jest osoba_
kontaktowa_imię a typem danych w nim
przechowywanych — VARCHAR(15).
Wszystkie dane przechowywane
w kolumnie pozostały w niej, lecz zostały
skrócone do 15 znaków.
M
o
d
y
f
i
k
a
c
j
a
t
a
b
e
l
Kasowanie tabel i baz danych
Aby usunąć tabelę lub bazę danych, należy
skorzystać z polecenia DROP. Użycie tego
polecenia jest bardzo proste:
DROP DATABASE nazwa_bazy_danych;
DROP TABLE nazwa_tabeli;
Oczywiście, jeżeli skasujemy tabelę,
wszystkie zapisane w niej dane zostaną
utracone. Gdy skasujemy bazę danych,
wszystkie tabele przejdą do historii.
111
Rysunek 4.15. ALTER TABLE nazwa_tabeli ADD
COLUMN dodaje nową kolumnę do tabeli
Rozdział 4.
3. Utwórz nową kolumnę osoba_kontaktowa_
nazwisko (rysunek 4.15).
ALTER TABLE klienci ADD COLUMN
(cid:170)osoba_kontaktowa_nazwisko VARCHAR(25)
(cid:170)AFTER osoba_kontaktowa_imie;
Od tej chwili tabela posiada jeszcze jedną
kolumnę, w której nie ma aktualnie żadnych
wartości. Dodając kolumnę do tabeli, można
skorzystać z klauzuli AFTER nazwa_kolumny,
aby wskazać, w którym miejscu tabeli
powinna być umieszczona nowa kolumna.
4. Potwierdź wprowadzenie zmian
w strukturze tabeli (rysunek 4.16).
SHOW COLUMNS FROM klienci;
Wskazówki
(cid:132) Aby zmienić typ istniejącej tabeli — jest to
oczywiście dozwolone — należy skorzystać
z następującego polecenia ALTER:
ALTER TABLE nazwa_tabeli ENGINE = MYISAM
(cid:132) Można również potwierdzić wprowadzenie
zmian w strukturze tabeli przez użycie
polecenia SHOW CREATE TABLE nazwa_tabeli.
Jak zauważymy po uruchomieniu tego
zapytania, nie będzie ono pokazywało
oryginalnego polecenia CREATE, ale raczej
polecenie CREATE, jakie spowoduje
utworzenie tabeli w takiej postaci jak
obecnie.
l
e
b
a
t
a
j
c
a
k
i
f
y
d
o
M
Rysunek 4.16. Potwierdzenie zmian w strukturze tabeli przez wykonanie
polecenia SHOW COLUMNS
112
Pobierz darmowy fragment (pdf)