Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00461 008000 10478203 na godz. na dobę w sumie
MySQL. Darmowa baza danych. Ćwiczenia praktyczne. Wydanie II - książka
MySQL. Darmowa baza danych. Ćwiczenia praktyczne. Wydanie II - książka
Autor: Liczba stron: 216
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-6857-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> mysql - programowanie
Porównaj ceny (książka, ebook, audiobook).

Postaw na MySQL - na pewno Ci się przyda!

MySQL to obecnie jeden z najlepszych, najwygodniejszych w obsłudze i stabilnych systemów zarządzania bazami danych, dostępny w wielu wersjach na różne platformy sprzętowe, także w wersji darmowej. Każdy, kto kiedykolwiek zetknął się z problemem dotyczącym przechowywania dużej ilości danych, do których potrzebny jest szybki dostęp, niewątpliwie doceni zalety tego systemu. MySQL jest wydajny, elastyczny, pozwala stosować różne rodzaje zapytań i umożliwia przeszukiwanie bazy danych pod wieloma kątami. Jeśli chcesz szybko i praktycznie przekonać się, czy MySQL spełnia Twoje wymagania, pora przeczytać tę książkę. Znajdziesz tu mnóstwo ćwiczeń, które pomogą Ci w lot poznać ważne aspekty pracy z systemem i umieścić w nim własne dane. Dowiesz się, jak zainstalować i skonfigurować MySQL. Nauczysz się tworzyć i usuwać bazy danych, nadawać uprawnienia użytkownikom oraz wczytywać polecenia z plików zewnętrznych. Zorientujesz się, jak zaprojektować najbardziej funkcjonalną bazę danych, manipulować danymi w jej obrębie i maksymalnie wykorzystywać instrukcje SQL. Po prostu bezboleśnie wejdziesz w skomplikowany świat baz danych!

Jeden klik - wyszukuj w mig!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Redaktor prowadzący: Ewelina Burska Projekt okładki: Maciej Pasek Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie?cwmsq2 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. ISBN: 978-83-246-6857-1 Copyright © Helion 2013 Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treĂci Rozdziaï 1. WstÚp Instalacja i konfiguracja Instalacja w systemie Windows WstÚpna konfiguracja w systemie Windows Uruchamianie i zatrzymywanie serwera w systemie Windows Instalacja w systemie Linux WstÚpna konfiguracja w systemie Linux Uruchamianie i zatrzymywanie serwera w systemie Linux Rozdziaï 2. Praca z serwerem ’Èczenie z serwerem Tworzenie i usuwanie baz danych Wybór bazy danych Tworzenie i usuwanie kont uĝytkowników Uprawnienia uĝytkowników Odbieranie uprawnieñ Uĝytkownicy anonimowi Systemy kodowania znaków Wczytywanie poleceñ z plików zewnÚtrznych Lista dostÚpnych baz danych 5 9 9 24 27 32 36 37 43 43 46 47 49 53 61 63 65 72 73 Kup książkęPoleć książkę 4 MySQL. Darmowa baza danych • mwiczenia praktyczne Rozdziaï 3. Koncepcja relacyjnych baz danych Rozdziaï 4. Tabele Klucze Relacje Zasady projektowania tabel Tworzenie struktury bazy danych Ogólna postaÊ instrukcji CREATE Typy tabel Typy danych Atrybuty kolumn Indeksy Kodowanie znaków dla tabel i kolumn Pobieranie struktury tabel Modyfikowanie tabel Usuwanie tabel Tabele w praktyce Rozdziaï 5. Wprowadzanie, modyfikacja i usuwanie danych Rozdziaï 6. Wprowadzanie danych Pobieranie danych Modyfikacja danych Usuwanie danych Modyfikacja istniejÈcego klucza gïównego Zïoĝone instrukcje SQL Pobieranie danych z kilku tabel Typy zïÈczeñ Grupowanie danych Perspektywy (widoki) Klucze obce Transakcje 77 77 78 80 85 93 93 99 100 113 118 122 124 127 134 135 145 145 154 171 174 176 179 179 183 189 201 204 208 Kup książkęPoleć książkę 4 Tworzenie struktury bazy danych Ogólna postaÊ instrukcji CREATE Dane w bazie przechowywane sÈ w tabelach. PojÚcie to zostaïo przed- stawione w rozdziale 3. „Koncepcja relacyjnych baz danych”. Czas wiÚc dowiedzieÊ siÚ, w jaki sposób moĝna tworzyÊ tabele. Sïuĝy do tego instrukcja CREATE TABLE, która w uproszczonej, schematycznej postaci wyglÈda nastÚpujÈco: CREATE TABLE nazwa_tabeli ( nazwa_kolumny_1 typ_kolumny_1 [atrybuty], nazwa_kolumny_2 typ_kolumny_2 [atrybuty], ... nazwa_kolumny_n typ_kolumny_n [atrybuty], ); Nazwy tabel i kolumn konwertowane sÈ na standard Unicode i w wer- sji podstawowej mogÈ zawieraÊ dowolne litery, cyfry, znaki $ (dolar), znaki _ (podkreĂlenie), znaki o kodach od U+0080 do U+FFFF. Nie mogÈ jednak skïadaÊ siÚ z samych cyfr ani byÊ sïowem kluczowym (zastrzeĝonym dla konstrukcji jÚzyka, np. SELECT, CREATE). Takie nazwy (ogólniej — identyfikatory) mogÈ byÊ stosowane bezpoĂrednio. Kup książkęPoleć książkę 94 MySQL. Darmowa baza danych • mwiczenia praktyczne W wersji rozszerzonej nazwy (identyfikatory) mogÈ zawieraÊ prak- tycznie wszystkie znaki Unicode z zestawu podstawowego (tzw. pod- stawowy zestaw znaków wielonarodowych, ang. Basic Multilingual Plane, obejmuje znaki o kodach od U+0000 do U+FFFF) z wyjÈtkiem znaku o kodzie 0 (U+0000). Nazwy mogÈ siÚ wtedy teĝ skïadaÊ z sa- mych cyfr, a takĝe ze sïów kluczowych. W praktyce oznacza to moĝ- liwoĂÊ stosowania dowolnych znaków specjalnych. Takie nazwy zaw- sze muszÈ byÊ jednak ujmowane w znaki ` (znak umieszczony na klawiaturze pod znakiem tyldy, lewy apostrof, grawis, ang. backtick, grave accent), np. `SELECT`1. Uwaga: niezaleĝnie od sposobu zapisu nazwa nie moĝe koñczyÊ siÚ spacjÈ. Typ kolumny okreĂla rodzaj danych, które dana kolumna bÚdzie mogïa przechowywaÊ, np. daty, liczby itp. WystÚpujÈce w MySQL typy danych zostanÈ omówione w kolejnym podrozdziale. W nazwach tabel (oraz baz danych) mogÈ wystÚpowaÊ zarówno maïe, jak i wielkie litery, jednak to, czy bÚdÈ rozróĝniane, zaleĝy od systemu plików w systemie operacyjnym, w którym zostaï zainstalowany MySQL. I tak w wiÚkszoĂci odmian Uniksa wielkie i maïe litery sÈ rozróĝniane, natomiast w systemach Windows — nie. W systemach Mac OS rozróĝnianie wielkoĂci liter zaleĝy od tego, czy wykorzysty- wany jest system plików HFS (nie sÈ rozróĝniane), czy UFS (sÈ roz- róĝniane). Nazwy kolumn równieĝ mogÈ zawieraÊ maïe i duĝe litery, jednak w tym wypadku nie sÈ one rozróĝniane i to niezaleĝnie od wersji systemu operacyjnego czy systemu plików. Naleĝy jednak pamiÚtaÊ, ĝe jeĂli w obrÚbie pojedynczej instrukcji SQL jedna nazwa (nawet gdy wielkoĂÊ liter nie jest rozróĝniana) wystÚpuje kilkukrotnie, w kaĝdym wystÈpieniu powinna mieÊ takÈ samÈ postaÊ. W ksiÈĝce zostaïa przyjÚta konwencja, ĝe nazwy tabel i kolumn (oraz innych struktur) bÚdÈ rozpoczynane wielkÈ literÈ, choÊ ma to zna- czenie wyïÈcznie estetyczne i pozostaje bez wpïywu na dziaïanie in- strukcji jÚzyka. W nazwach tabel i kolumn bÚdÈ takĝe uĝywane polskie znaki, naleĝy wiÚc zadbaÊ o odpowiednie ustawienia zwiÈzane z klien- tem i serwerem (byïo to opisane w rozdziale 3.). W przypadku wystÈ- pienia problemów pomóc moĝe ujÚcie tych nazw w znaki ` (moĝna 1 Po wïÈczeniu na serwerze trybu ANSI_QUOTES jako wyróĝniki identyfikatora mogÈ byÊ takĝe stosowane znaki cudzysïowu prostego. Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 95 teĝ zrezygnowaÊ ze stosowania znaków narodowych i ograniczyÊ siÚ do alfabetu ïaciñskiego). Dla treningu spróbujmy teraz utworzyÊ prostÈ tabelÚ Klient, która bÚdzie zawieraïa dwie kolumny. Pierwsza — o nazwie Indeks — bÚdzie przechowywaïa liczby caïkowite (typ danych INTEGER), druga — o na- zwie Nazwa — bÚdzie przechowywaïa ciÈgi maksymalnie 20 znaków (typ VARCHAR(20)). m W I C Z E N I E 4.1 Utworzenie prostej tabeli Utwórz tabelÚ o nazwie Klient zawierajÈcÈ dwie kolumny — pierwszÈ o nazwie Indeks typu INTEGER, drugÈ o nazwie Nazwa typu VARCHAR(20). Utworzenie takiej tabeli osiÈgniemy po wydaniu polecenia w postaci: CREATE TABLE Klient ( Indeks INTEGER, Nazwa VARCHAR(20) ); OczywiĂcie najpierw naleĝy uruchomiÊ klienta mysql, zalogowaÊ siÚ do serwera i wybraÊ bazÚ danych (np. test1), tak jak byïo to opisy- wane we wczeĂniejszych rozdziaïach. Po wykonaniu wymienionych czynnoĂci w oknie konsoli pojawi siÚ widok zaprezentowany na ry- sunku 4.1. Rysunek 4.1. Zalogowanie do serwera i utworzenie tabeli Klient w bazie test1 Kup książkęPoleć książkę 96 MySQL. Darmowa baza danych • mwiczenia praktyczne Za pomocÈ instrukcji CREATE TABLE moĝna utworzyÊ tabelÚ w dowolnej bazie danych, do której ma siÚ odpowiednie prawa, a nie tylko w aktu- alnie wybranej (jak w Êwiczeniu 4.1). W takim wypadku oprócz nazwy tabeli naleĝy podaÊ nazwÚ bazy: nazwa_bazy.nazwa_tabeli Gdyby nazwy te miaïy zawieraÊ jakieĂ znaki specjalne, naleĝy je zgod- nie z podanymi wyĝej informacjami ujÈÊ w znaki `. CzÚsto jednak w celu ujednolicenia kodu znaki te stosuje siÚ zawsze, niezaleĝnie od postaci nazwy. m W I C Z E N I E 4.2 Tworzenie tabeli w konkretnej bazie danych Utwórz przykïadowÈ tabelÚ bez wczeĂniejszego wybierania bazy da- nych. Tabela powinna mieÊ nazwÚ SELECT i znajdowaÊ siÚ w bazie o nazwie CREATE. Obie podane nazwy sÈ fragmentami instrukcji SQL, a zatem aby moĝna byïo ich uĝyÊ jako identyfikatorów, koniecznie jest ujÚcie wskazanych ciÈgów w znaki `. Poniewaĝ tworzenie tabeli ma siÚ odbywaÊ bez wyboru bazy (bez wskazania bazy przy uruchamianiu klienta i bez uĝy- cia instrukcji use), to dodatkowo konieczne bÚdzie wskazanie nazwy ba- zy w instrukcji CREATE. ZakïadajÈc wiÚc, ĝe w tabeli bÚdzie tylko jedna kolumna o nazwie Indeks i typie INTEGER (oraz ĝe wskazanej bazy nie ma jeszcze na serwerze), polecenie zawarte w Êwiczeniu moĝna wy- konaÊ za pomocÈ dwóch nastÚpujÈcych instrukcji (rysunek 4.2): CREATE DATABASE `SELECT`; CREATE TABLE `SELECT`.`CREATE` ( Indeks INTEGER ); Rysunek 4.2. Uĝycie sïów kluczowych w nazwie bazy i tabeli Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 97 Co siÚ jednak stanie, jeĂli spróbujemy utworzyÊ tabelÚ o nazwie, która juĝ istnieje w bazie? W takiej sytuacji zostanie zgïoszony bïÈd widocz- ny na rysunku 4.3 (przy bliĝszym przyjrzeniu siÚ widaÊ równieĝ, ĝe w uĝytej wersji serwera nie jest rozpoznawana wielkoĂÊ liter w nazwie tabeli). Jest to caïkiem zrozumiaïe zachowanie systemu. Czasem jednak chcielibyĂmy utworzyÊ tabelÚ o zadanej nazwie tylko wtedy, gdy nie istnieje ona w bazie, a gdyby istniaïa — nie podejmowaÊ ĝadnego dzia- ïania. JeĂli oczekujemy takiego zachowania od serwera, powinniĂmy skorzystaÊ z dodatkowej konstrukcji IF NOT EXISTS w ogólnej postaci: CREATE TABLE IF NOT EXISTS nazwa_tabeli ( definicje kolumn ); Moĝna jÈ przetïumaczyÊ jako: utwórz tabelÚ nazwa_tabeli, o ile nie istnieje ona jeszcze w bazie. Rysunek 4.3. Próba utworzenia juĝ istniejÈcej tabeli m W I C Z E N I E 4.3 Utworzenie tabeli, o ile nie istnieje ona juĝ w bazie Napisz instrukcjÚ tworzÈcÈ tabelÚ Klient (takÈ jak w Êwiczeniu 4.1), która nie spowoduje wystÈpienia bïÚdu w sytuacji, jeĂli tabela o takiej nazwie bÚdzie juĝ istniaïa w bazie. CREATE TABLE IF NOT EXISTS Klient ( Indeks INTEGER, Nazwa VARCHAR(20) ); Tworzona tabela moĝe byÊ równieĝ tymczasowa, czyli taka, która zo- stanie automatycznie usuniÚta po zakoñczeniu poïÈczenia. Co wiÚ- cej, tabela jest wtedy powiÈzana wyïÈcznie z poïÈczeniem, w którym zostaïa utworzona, tak wiÚc dwóch uĝytkowników moĝe w jednym czasie w jednej bazie utworzyÊ róĝne tabele tymczasowe o takiej samej Kup książkęPoleć książkę 98 MySQL. Darmowa baza danych • mwiczenia praktyczne nazwie. TymczasowoĂÊ tabeli zapewnia sïowo TEMPORARY umieszczone za CREATE, czyli instrukcja w ogólnej postaci: CREATE TEMPORARY TABLE nazwa_tabeli ( definicje kolumn ); m W I C Z E N I E 4.4 Tabela tymczasowa Utwórz tymczasowÈ tabelÚ o dwóch dowolnych kolumnach. CREATE TEMPORARY TABLE Test ( Id INTEGER, Wartosc INTEGER ); Istnieje takĝe moĝliwoĂÊ utworzenia nowej tabeli na bazie juĝ istniejÈcej. Stosujemy w tym celu instrukcjÚ CREATE w postaci: CREATE TABLE nowa_tabela LIKE istniejæca_tabela; Oznacza ona: utwórz tabelÚ o nazwie nowa_tabela i o strukturze takiej jak istniejæca_tabela. m W I C Z E N I E 4.5 Tworzenie jednej tabeli na podstawie innej Utwórz tabelÚ Klient2 o strukturze pobranej z tabeli Klient. W celu wykonania Êwiczenia naleĝy uĝyÊ instrukcji: CREATE TABLE Klient2 LIKE Klient; Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 99 Typy tabel MySQL obsïuguje kilka rodzajów typów tabel. DomyĂlnie wykorzy- stywany jest typ InnoDB (od wersji 5.5) lub MyISAM (do wersji 5.1)2. ZmianÚ typu domyĂlnego moĝna osiÈgnÈÊ, modyfikujÈc parametr de- fault-storage-engine w pliku konfiguracyjnym my.ini (my.cnf). MyISAM charakteryzuje siÚ duĝÈ szybkoĂciÈ, nie oferuje jednak wsparcia dla transakcji i kluczy obcych (rozdziaï 6.); obsïuguje za to takie moĝliwo- Ăci jak przeszukiwanie peïnotekstowe (ang. full text search) czy spa- kowane indeksy (ang. packed indexes). InnoDB jest domyĂlny w najnow- szych wersjach bazy, nowoczeĂniejszy i obsïuguje transakcje (ang. transactions) oraz tzw. blokowanie wierszy (ang. row locking). W obec- nych implementacjach okazuje siÚ równieĝ bardzo wydajny. Kaĝda tabela bazy danych moĝe mieÊ swój wïasny typ. Aby okreĂliÊ go podczas tworzenia tabeli, do instrukcji CREATE TABLE naleĝy dodaÊ ciÈg3: ENGINE = typ JeĂli zatem chcemy, aby tabela miaïa np. typ MyISAM, naleĝy zastosowaÊ instrukcjÚ: CREATE TABLE nazwa_tabeli ( definicja kolumn ) ENGINE = MyISAM W przypadku juĝ istniejÈcej tabeli jej typ moĝna zmieniÊ za pomocÈ instrukcji ALTER TABLE o schematycznej postaci: ALTER TABLE nazwa_tabeli ENGINE= typ na przykïad: ALTER TABLE Klienci ENGINE= InnoDB 2 Nie sÈ to jedyne rodzaje tabel. Opis pozostaïych typów moĝna znaleěÊ w dokumentacji MySQL, w sekcji „Storage Engines”. 3 W wersjach serwera starszych niĝ 4.018 powinien byÊ to ciÈg TYPE = typ . Kup książkęPoleć książkę 100 MySQL. Darmowa baza danych • mwiczenia praktyczne Typy danych Kaĝda kolumna tabeli w bazie danych ma przypisany typ, który okreĂla rodzaj danych, jakie mogÈ byÊ w niej przechowywane. WystÚpujÈce w MySQL typy danych moĝna podzieliÊ na trzy grupy: T liczbowe, T daty i czasu, T ïañcuchowe. Typy liczbowe Typy liczbowe moĝna podzieliÊ na dwa rodzaje — typy caïkowito- liczbowe (ang. integer types) oraz typy zmiennoprzecinkowe (ang. floating point types). Zgodnie z nazwami sïuĝÈ one do reprezentacji wartoĂci caïkowitych oraz zmiennoprzecinkowych (zmiennopozycyj- nych, rzeczywistych). Typy caïkowitoliczbowe zostaïy przedstawione w tabeli 4.1. Jeden z wymienionych w niej typów — INTEGER — byï juĝ uĝywany przy tworzeniu przykïadowej tabeli Klient. W kaĝdym z wymienionych przypadków z wyjÈtkiem BOOL i BOOLEAN moĝna za- stosowaÊ dodatkowy modyfikator okreĂlajÈcy maksymalnÈ szerokoĂÊ wyĂwietlania w sytuacji, kiedy liczba znaków wartoĂci jest mniejsza niĝ maksymalna. Definicja typu ma wtedy postaÊ: nazwa_typu(ile) Dozwolone sÈ takĝe modyfikatory UNSIGNED oraz ZEROFILL. Pierwszy z nich oznacza, ĝe wartoĂÊ ma byÊ traktowana jako liczba bez znaku (czyli niedopuszczalne sÈ wartoĂci ujemne). Drugi powoduje, ĝe je- ĝeli liczba cyfr w danej wartoĂci jest mniejsza od maksymalnej liczby wyĂwietlanych znaków, wolne miejsca zostanÈ dopeïnione zerami. Zastosowanie atrybutu ZEROFILL powoduje, ĝe automatycznie zosta- nie równieĝ zastosowany atrybut UNSIGNED. Na przykïad jeĝeli zostanie zastosowany typ TINYINT UNSIGNED, w po- szczególnych wierszach kolumny bÚdzie moĝna zapisywaÊ wartoĂci od 0 do 255. Jeĝeli natomiast zostanie zastosowany typ TINYINT(4) ZEROFILL, w poszczególnych wierszach kolumny równieĝ bÚdzie moĝna zapi- sywaÊ jedynie wartoĂci od 0 do 255, ale bÚdÈ one wyĂwietlane zawsze w postaci czteroznakowej, w której wolne miejsca z lewej strony zo- staïy wypeïnione zerami. Oznacza to, ĝe wartoĂÊ 2 bÚdzie wyĂwietlana jako 0002, wartoĂÊ 64 jako 0064, a 128 jako 0128. Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 101 Tabela 4.1. Typy caïkowitoliczbowe Typ BIT BOOL BOOLEAN TINYINT SMALLINT MEDIUMINT Zakres wartoĂci - - - Od –128 do 127 dla liczb ze znakiem i od 0 do 255 dla liczb bez znaku. Od –32 768 (–215) do 32 767 (215 – 1) dla liczb ze znakiem i od 0 do 65 535 (216 – 1) dla liczb bez znaku. Od –8 388 608 (–223) do 8 388 607 (223 – 1) dla liczb ze znakiem i od 0 do 16 777 215 (224 – 1) dla liczb bez znaku. Liczba zajmowanych bajtów zmienna 1 1 1 2 3 Opis W wersjach od 5.0.3 reprezentuje pola bitowe od 1 do 64 bitów, w wersjach wczeĂniejszych syno- nim dla TINYINT(1). Synonim dla TINYINT(1). WartoĂÊ 0 jest interpretowana jako false, wartoĂÊ róĝna od 0 jako true. W przyszïoĂci ma zo- staÊ wprowadzona peïna obsïuga typu boolowskiego. Synonim dla TINYINT(1). WartoĂÊ 0 jest interpretowana jako false, wartoĂÊ róĝna od 0 jako true. W przyszïoĂci ma zo- staÊ wprowadzona peïna obsïuga typu boolowskiego. Reprezentacja bardzo maïych wartoĂci caï- kowitoliczbowych. Reprezentacja maïych wartoĂci caïkowito- liczbowych. Reprezentacja Ăred- nich wartoĂci caïko- witoliczbowych. Kup książkęPoleć książkę 102 MySQL. Darmowa baza danych • mwiczenia praktyczne Tabela 4.1. Typy caïkowitoliczbowe — ciÈg dalszy Liczba zajmowanych bajtów Opis 4 4 8 Reprezentacja zwy- kïych wartoĂci caïko- witoliczbowych. Synonim dla INT. Reprezentacja duĝych wartoĂci caïkowito- liczbowych. Typ INT INTEGER BIGINT Zakres wartoĂci Od –2 147 483 648 (–231) do 2 147 483 647 (231 – 1) dla liczb ze znakiem i od 0 do 4 294 967 295 (232 – 1) dla liczb bez znaku. Od –2 147 483 648 (–231) do 2 147 483 647 (231 – 1) dla liczb ze znakiem i od 0 do 4 294 967 295 (232 – 1) dla liczb bez znaku. Od –9 223 372 036 854 775 808 (–263) do 9 223 372 036 854 775 80 7 (263 – 1) dla liczb ze zna- kiem i od 0 do 18 446 744 073 709 551 615 (264 – 1) dla liczb bez znaku. m W I C Z E N I E 4.6 Tabela z kolumnami typu INTEGER Utwórz tabelÚ, która bÚdzie zawieraïa dwie kolumny typu INTEGER, pierwszÈ o nazwie Id i drugÈ o nazwie Znacznik. CREATE TABLE Test ( Id INTEGER, Znacznik INTEGER ); Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 103 m W I C Z E N I E 4.7 Tabela z kolumnami typu INTEGER i dodatkowymi atrybutami Utwórz tabelÚ, która bÚdzie zawieraïa kolumnÚ typu INTEGER przecho- wujÈcÈ wyïÈcznie dodatnie wartoĂci z przedziaïu 0 – 65 535 i w której liczba wyĂwietlanych znaków bÚdzie zawsze równa 5, a wolne miej- sca dla wartoĂci krótszych niĝ 5 znaków bÚdÈ wypeïniane zerami. CREATE TABLE Test ( Id SMALLINT(5) ZEROFILL ); Typy zmiennoprzecinkowe zostaïy przedstawione w tabeli 4.2. Po- dobnie jak w przypadku typów caïkowitoliczbowych istnieje moĝli- woĂÊ zastosowania modyfikatora okreĂlajÈcego szerokoĂÊ wyĂwietlania. W przypadku typów FLOAT, DOUBLE i DOUBLE PRECISION wystÚpuje on zaw- sze jednoczeĂnie z modyfikatorem okreĂlajÈcym liczbÚ miejsc po prze- cinku, ogólnie: nazwa_typu(mod1, mod2) gdzie mod1 okreĂla szerokoĂÊ wyĂwietlania (caïkowitÈ liczbÚ cyfr zna- czÈcych), a mod2 liczbÚ uwzglÚdnianych miejsc po przecinku. W przypadku typu DECIMAL i jego synonimów moĝliwe jest zastoso- wanie modyfikatora okreĂlajÈcego szerokoĂÊ wyĂwietlania bez mody- fikatora okreĂlajÈcego liczbÚ miejsc po przecinku, czyli prawidïowa jest zarówno konstrukcja: DECIMAL(mod1) jak i: DECIMAL(mod1, mod2) W stosunku do typów zmiennoprzecinkowych moĝna równieĝ stoso- waÊ modyfikatory ZEROFILL oraz UNSIGNED. Znaczenie pierwszego z nich jest takie samo jak w przypadku typów caïkowitoliczbowych. Zasto- sowanie modyfikatora UNSIGNED powoduje natomiast, ĝe dozwolone bÚ- dÈ jedynie wartoĂci nieujemne, nie zmieni siÚ natomiast zakres warto- Ăci moĝliwych do reprezentowania. Kup książkęPoleć książkę 104 MySQL. Darmowa baza danych • mwiczenia praktyczne Tabela 4.2. Typy zmiennoprzecinkowe Typ Zakres wartoĂci FLOAT (precyzja) zmienny Liczba zajmowanych bajtów 4 lub 8 FLOAT DOUBLE od –3.402823466E+38 do 3.402823466E+38 od –1.7976931348 623157E+308 do 1.7976931348623157E +308 DOUBLE PRECISION REAL jw. jw. 4 8 jw. jw. DECIMAL zmienny zmienna DEC NUMERIC FIXED jw. jw. jw. jw. jw. jw. Opis Parametr precyzja okreĂla precyzjÚ, z jakÈ bÚdzie re- prezentowana dana wartoĂÊ rzeczywista. W przypadku wartoĂci od 0 do 24 mamy do czynienia z liczbami o pojedynczej precyzji, a w przypadku wartoĂci od 25 do 63 — z liczbami o podwójnej precyzji, co odpowiada opisanym niĝej typom FLOAT i DOUBLE. Liczby zmiennoprzecinkowe pojedynczej precyzji. Liczby zmiennoprzecinkowe podwójnej precyzji. Synonim dla DOUBLE. Synonim dla DOUBLE. WartoĂci z separatorem dziesiÚtnym. W wersjach przed 5.0.3 przechowywa- na jako ïañcuch znaków. Zarówno caïkowita maksy- malna liczba znaków, jak i liczba znaków po separa- torze dziesiÚtnym moĝe byÊ okreĂlana przez dodatkowe parametry. Synonim dla DECIMAL. Synonim dla DECIMAL. Synonim dla DECIMAL, dodany w wersji 4.1.0. Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 105 m W I C Z E N I E 4.8 Tabela z kolumnÈ przechowujÈcÈ wartoĂci rzeczywiste Utwórz tabelÚ zawierajÈcÈ kolumnÚ przechowujÈcÈ wartoĂci rzeczy- wiste pojedynczej precyzji. Przykïadowa instrukcja tworzÈca takÈ tabelÚ moĝe mieÊ postaÊ: CREATE TABLE Test ( Id INTEGER, Wartoħè FLOAT ); Po uĝyciu powyĝszej instrukcji tabela Test bÚdzie zawieraïa dwie kolumny, pierwszÈ o nazwie Id typu INTEGER i drugÈ o nazwie Wartoħè typu FLOAT. m W I C Z E N I E 4.9 Kolumna z wartoĂciami rzeczywistymi o okreĂlonej precyzji Utwórz tabelÚ zawierajÈcÈ kolumnÚ przechowujÈcÈ wartoĂci z sepa- ratorem dziesiÚtnym, z szerokoĂciÈ wyĂwietlania okreĂlonÈ na szeĂÊ cyfr znaczÈcych, z trzema miejscami po przecinku. CREATE TABLE Test ( Wartoħè DECIMAL(6, 3) ); Typy daty i czasu Typy pozwalajÈce na reprezentacjÚ daty i czasu zostaïy zebrane w ta- beli 4.3. Dane tych typów bÚdÈ wyĂwietlane w formatach przedstawio- nych w kolumnie Opis tabeli, mogÈ byÊ natomiast zapisywane w ba- zie przy uĝyciu róĝnych formatów. W przypadku typów DATE, DATETIME i TIMESTAMP dopuszczalne sÈ formaty: T CiÈg znaków RRRR-MM-DD GG:MM:SS i RR-MM-DD GG:MM:SS. PomiÚdzy skïadowymi daty oraz pomiÚdzy skïadowymi czasu mogÈ wystÚpowaÊ dowolne znaki przestankowe. Prawidïowe sÈ zatem zapisy: 2014-05-20 20:12:55, 2014.05.20 20-12-55, 2014*05*20 20 12 55. Kup książkęPoleć książkę 106 MySQL. Darmowa baza danych • mwiczenia praktyczne Liczba zajmowanych bajtów Opis Tabela 4.3. Typy daty i czasu Typ DATE Dopuszczalne wartoĂci Od 1000-01-01 do 9999-12-31. DATETIME Od 1000-01-01 00:00:00 do 9999- 12-31 23:59:59. TIMESTAMP TIME Zaleĝne od dodat- kowych opcji. Od –838:59:59 do 838:59:59. 3 8 4 3 YEAR Od 1901 do 2155. 1 Typ przeznaczony do repre- zentacji daty. WartoĂci bÚdÈ pobierane z bazy i wyĂwietlane w formacie RRRR-MM-DD. Typ przeznaczony do repre- zentacji daty i czasu. WartoĂci bÚdÈ pobierane z bazy i wyĂwie- tlane w formacie RRRR-MM-DD GG:MM:SS. Typ przeznaczony do repre- zentacji znacznika czasu. Typ przeznaczony do repre- zentacji czasu. WartoĂci bÚdÈ pobierane z bazy i wyĂwietlane w formacie GG:MM:SS lub GGG:MM:SS. Typ przeznaczony do repre- zentacji lat. WartoĂci bÚdÈ po- bierane z bazy i wyĂwietlane w formacie RRRR. WartoĂci tego typu sÈ zapisywane na jednym bajcie. T CiÈg znaków RRRR-MM-DD i YY-MM-DD. PomiÚdzy skïadowymi daty mogÈ wystÚpowaÊ dowolne znaki przestankowe. Prawidïowe sÈ zatem zapisy: 2014-05-20, 2014.05.20, 14*05*20. T CiÈg znaków RRRRMMDDGGMMSS i RRMMDDGGMMSS. PomiÚdzy skïadowymi nie mogÈ wystÚpowaÊ ĝadne znaki przestankowe, caïy ciÈg musi zaĂ reprezentowaÊ poprawnÈ datÚ i czas. Prawidïowe sÈ zatem zapisy: 20140520201255, 140520201255 — oba interpretowane jako 2014-05-20 20:12:55. T CiÈg znaków RRRRMMDD i RRMMDD. PomiÚdzy skïadowymi nie mogÈ wystÚpowaÊ ĝadne znaki przestankowe, caïy ciÈg musi zaĂ reprezentowaÊ poprawnÈ datÚ. Prawidïowe sÈ zatem zapisy: 20140520, 140520, oba interpretowane jako 2014-05-20. T WartoĂÊ liczbowa zapisana jako RRRRMMDDGGMMSS, RRMMDDGGMMSS, RRRRMMDD lub RRMMDD, o ile reprezentuje poprawnÈ datÚ i (lub) czas. Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 107 W przypadków typu TIME dopuszczalne sÈ nastÚpujÈce formaty: T CiÈg znaków D GG:MM:SS. CiÈg D reprezentuje dni i moĝe przyjmowaÊ wartoĂci od 0 do 34. Moĝliwe sÈ równieĝ warianty skrócone w nastÚpujÈcych postaciach: GG:MM:SS, GG:MM, D GG:MM, D GG i SS. Poprawne sÈ zatem zapisy: 12:52:24, 12:52, 24. T CiÈg znaków GGMMSS. PomiÚdzy skïadowymi nie mogÈ wystÚpowaÊ ĝadne znaki przestankowe, caïy ciÈg musi zaĂ reprezentowaÊ poprawny czas. Poprawne sÈ zatem zapisy: 125224, 182931. T WartoĂÊ liczbowa zapisana jako GGMMSS, o ile reprezentuje poprawny czas. Moĝliwe sÈ równieĝ alternatywne zapisy w postaci: MMSS, SS. W przypadku typu YEAR dopuszczalne sÈ nastÚpujÈce formaty: T CiÈg znaków w formacie RRRR. Dopuszczalny zakres to 1901 – 2155. T CiÈg znaków w formacie RR. Dopuszczalny zakres to 00 – 99. CiÈgi od 00 do 69 sÈ interpretowane jako lata 2000 – 2069, natomiast ciÈgi od 70 do 99 jako lata 1970 –1999. T WartoĂÊ liczbowa w formacie RRRR. Dopuszczalny zakres to 1901 – 2155. T WartoĂÊ liczbowa w formacie RR. Dopuszczalny zakres to 1 – 99. WartoĂci od 1 do 69 sÈ interpretowane jako lata 2001 – 2069, natomiast ciÈgi od 70 do 99 jako lata 1970 – 1999. JeĂli w którymkolwiek z wymienionych przypadków zostanie poda- na wartoĂÊ, która nie moĝe zostaÊ zinterpretowana jako poprawny argument danego typu, w bazie bÚdzie ona interpretowana jako war- toĂÊ specjalna: T dla typu DATE — 0000-00-00, T dla typu DATETIME — 0000-00-00 00:00:00, T dla typu TIMESTAMP — 00000000000000, T dla typu TIME — 00:00:00, T dla typu YEAR — 0000. Kup książkęPoleć książkę 108 MySQL. Darmowa baza danych • mwiczenia praktyczne m W I C Z E N I E 4.10 Kolumna przechowujÈca dane o dacie i czasie Utwórz tabelÚ zawierajÈcÈ kolumnÚ przechowujÈcÈ wartoĂci okreĂlajÈce jednoczeĂnie datÚ i czas. CREATE TABLE Test ( Dataiczas DATETIME ); Typy ïañcuchowe Typy ïañcuchowe sïuĝÈ do przechowywania zarówno ciÈgów znaków, jak i danych binarnych. Moĝna je podzieliÊ na cztery grupy: T CHAR i VARCHAR, T BINARY i VARBINARY, T BLOB i TEXT, T ENUM i SET. Typy CHAR i VARCHAR Typy CHAR i VARCHAR sïuĝÈ do przechowywania ïañcuchów znakowych, czyli tekstów. Oba wymagajÈ podania dïugoĂci ïañcucha za nazwÈ typu w nawiasie okrÈgïym, czyli: CHAR(dđugoħè) i VARCHAR(dđugoħè) gdzie dđugoħè oznacza liczbÚ znaków4. Na przykïad jeĂli chcemy utwo- rzyÊ kolumnÚ, która bÚdzie mogïa przechowywaÊ do 20 znaków, na- leĝy zastosowaÊ konstrukcjÚ: CHAR(20) lub VARCHAR(20) 4 W wersjach wczeĂniejszych niĝ 4.1 — liczbÚ bajtów. Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 109 W przypadku typu CHAR caïa kolumna w bazie danych bÚdzie miaïa dïugoĂÊ wskazanÈ parametrem dđugoħè. JeĂli zapisywane dane bÚdÈ miaïy mniej znaków, pozostaïe miejsca zostanÈ uzupeïnione spacja- mi z prawej strony. Spacje te, jak i te znajdujÈce siÚ na poczÈtku tek- stu (!), bÚdÈ usuwane podczas pobierania danych. Parametr dđugoħè moĝe przyjmowaÊ wartoĂci od 0 do 2555. W przypadku typu VARCHAR kaĝdy wiersz kolumny ma zmiennÈ dïu- goĂÊ wynikajÈcÈ z liczby znaków zapisywanego ïañcucha (plus 1 lub 2 bajty niezbÚdne do zapisania liczby znaków ïañcucha). Parametr dđugoħè moĝe przyjmowaÊ nastÚpujÈce wartoĂci: od 1 do 255 w wer- sjach przed 4.0.2, od 0 do 255 w wersjach od 4.0.2 oraz od 0 do 65 535, poczÈwszy od wersji 5.0.3. Naleĝy jednoczeĂnie zwróciÊ uwagÚ, ĝe maksymalna dïugoĂÊ jednego wiersza danych to równieĝ 65 535 baj- tów, zatem kolumna typu VARCHAR o maksymalnej dïugoĂci musiaïaby byÊ jedynÈ kolumnÈ w wierszu i zawieraÊ wyïÈcznie znaki jednobaj- towe w liczbie nie wiÚkszej niĝ 65 533 (ze wzglÚdu na koniecznoĂÊ zapisania na dwóch bajtach liczby znaków). W wersjach przed 5.0.3 podczas zapisywania danych do bazy usuwane sÈ spacje z poczÈtku i koñca tekstu. PoczÈwszy od wersji 5.0.3, spacje te nie sÈ usuwane — ani podczas zapisu, ani podczas odczytu. W przypadku próby zapisania w wierszu kolumny wiÚkszej liczby znaków, niĝ wynika to z wartoĂci parametru dđugoħè, nadmiarowa liczba bajtów zostanie obciÚta i wygenerowane bÚdzie ostrzeĝenie. m W I C Z E N I E 4.11 Tabela z kolumnami przechowujÈcymi krótkie dane tekstowe Utwórz tabelÚ, która bÚdzie zawieraïa nastÚpujÈce kolumny: Id — zawierajÈcÈ hipotetyczny identyfikator osoby, Imiú — przechowujÈcÈ imiona (o dïugoĂci nie wiÚkszej niĝ 25 znaków), Nazwisko — prze- chowujÈcÈ nazwiska (o dïugoĂci nie wiÚkszej niĝ 35 znaków). CREATE TABLE Osoby ( Id INTEGER, Imiú VARCHAR(25), Nazwisko VARCHAR(35) ); 5 W wersjach wczeĂniejszych niĝ 3.23 — od 1 do 255. Kup książkęPoleć książkę 110 MySQL. Darmowa baza danych • mwiczenia praktyczne Typy BINARY i VARBINARY Typy BINARY i VARBINARY sÈ podobne do CHAR i VARCHAR, z tÈ róĝnicÈ, ĝe przechowujÈ ïañcuchy bajtów, a nie znaków. Typ BINARY definiuje siÚ w postaci: BINARY(dđugoħè) natomiast typ VARBINARY w postaci: VARBINARY(dđugoħè) Pozostaïe wïaĂciwoĂci sÈ analogiczne. Naleĝy jedynie zwróciÊ uwagÚ, ĝe parametr dđugoħè w tym przypadku oznacza liczbÚ bajtów, a nie znaków. Typy BLOB i TEXT Typy BLOB i TEXT sïuĝÈ do przechowywania duĝej iloĂci danych. Typ BLOB (z ang. Binary Large Object) sïuĝy do przechowywania ciÈgów binarnych, natomiast TEXT — tekstowych. Oba typy dzielÈ siÚ na cztery podtypy róĝniÈce siÚ od siebie maksymalnÈ wielkoĂciÈ danych, które mogÈ byÊ za ich pomocÈ zapisane. Zobrazowano to w tabelach 4.4 i 4.5. Dane tych typów nie sÈ zapisywane bezpoĂrednio w wierszu tabeli (jak w przypadku typów CHAR i VARCHAR), ale w osobnym obszarze pamiÚci. DziÚki temu w jednym wierszu moĝe siÚ znaleěÊ wiele ko- lumn przechowujÈcych dane tych typów. Tabela 4.4. Typy BLOB Typ Maksymalny rozmiar danych Opis TINYBLOB 255 (28 – 1) bajtów BLOB 65 535 (216 – 1) bajtów MEDIUMBLOB 16 777 215 (224 – 1) Niewielki obiekt binarny Zwykïy obiekt binarny Obiekt binarny Ăredniej wielkoĂci LONGBLOB 4 294 967 295 (232 – 1) Duĝy obiekt binarny Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 111 Tabela 4.5. Typy TEXT Typ Maksymalny rozmiar danych Opis TINYTEXT 255 (28 – 1) bajtów Niewielki obiekt tekstowy TEXT 65 535 (216 – 1) bajtów Zwykïy obiekt tekstowy MEDIUMTEXT 16 777 215 (224 – 1) Obiekt tekstowy Ăredniej wielkoĂci LONGTEXT 4 294 967 295 (232 – 1) Duĝy obiekt tekstowy m W I C Z E N I E 4.12 Tabela z danymi typu TEXT Utwórz tabelÚ zawierajÈcÈ kolumny: Id typu INTEGER oraz Opis typu tek- stowego; kolumna Opis powinna mieÊ moĝliwoĂÊ przechowywania tekstu w iloĂci do 64 KiB6. CREATE TABLE Test ( Id INTEGER, Opis TEXT ); Typy ENUM i SET Typ ENUM jest typem wyliczeniowym pozwalajÈcym ograniczyÊ zbiór wartoĂci, który bÚdzie mógï byÊ przechowywany w danej kolumnie. Dopuszczalne wartoĂci definiuje siÚ w nawiasie okrÈgïym za nazwÈ typu, oddzielajÈc je od siebie znakami przecinka, schematycznie: ENUM( wartoħè1 , wartoħè2 , ..., wartoħèN ) W tak okreĂlonej kolumnie w pojedynczym wierszu bÚdzie mogïa siÚ znaleěÊ tylko jedna z zadeklarowanych wartoĂci (a takĝe wartoĂÊ NULL i pusty ciÈg znaków zapisywany jako ). Maksymalna liczba wartoĂci w typie ENUM to 65 535. Przykïadowo w kolumnie zdefiniowanej jako: ENUM( jeden , dwa , trzy ) 6 KiB (kibibyte) czyli 210 = 1024 bajty. Jednostka zgodna z normÈ IEC 60027-2 definiujÈcÈ uĝywane w informatyce jednostki miar. Pozwala to na unikniÚcie niejednoznacznoĂci powstajÈcych w przypadku stosowania oznaczeñ SI, gdzie zapis KB moĝe byÊ rozumiany zarówno jako 1000 bajtów, jak i 1024 bajty. Kup książkęPoleć książkę 112 MySQL. Darmowa baza danych • mwiczenia praktyczne bÚdÈ dopuszczalne jedynie ciÈgi znaków: jeden, dwa i trzy. Kaĝda wartoĂÊ umieszczona w definicji typu otrzymuje swój indeks (pierwszy element otrzymuje wartoĂÊ 1), który jest nastÚpnie uĝywany w tabe- lach. DziÚki temu moĝna zachowaÊ czytelnÈ formÚ zapisywanych wartoĂci przy jednoczesnej oszczÚdnoĂci miejsca w bazie. Uwaga: z tego teĝ powodu nie zaleca siÚ uĝywania wartoĂci, które mogÈ byÊ interpretowane jako numeryczne. Przykïadowy poniĝszy zapis jest prawidïowy: ENUM( 0 , 1 , 2 ) ale moĝe prowadziÊ do niejednoznacznoĂci, lepiej wiÚc unikaÊ takich konstrukcji. m W I C Z E N I E 4.13 Kolumna z typem wyliczeniowym ENUM Utwórz tabelÚ zawierajÈcÈ kolumnÚ, która bÚdzie mogïa przechowywaÊ jednÈ z wartoĂci: zielony, czerwony, niebieski. CREATE TABLE Test ( Kolor ENUM( zielony , czerwony , niebieski ) ); Typ SET jest równieĝ typem wyliczeniowym, który definiowany jest w analogiczny sposób jak typ ENUM, czyli: SET( wartoħè1 , wartoħè2 , ..., wartoħèN ) W tym jednak przypadku kaĝdy wiersz kolumny bÚdzie mógï zawieraÊ dowolny podzbiór zdefiniowanych wartoĂci oddzielonych od siebie znakami przecinka. Czyli po zdefiniowaniu kolumny jako: SET( jeden , dwa ) w kaĝdym wierszu bÚdÈ mogïy byÊ zarówno wartoĂci jeden i dwa, jak i jednoczeĂnie jeden, dwa. Maksymalna liczba wartoĂci moĝliwa do za- deklarowania w typie SET to 64. Kup książkęPoleć książkę Rozdziaï 4. • Tworzenie struktury bazy danych 113 m W I C Z E N I E 4.14 Kolumna z typem wyliczeniowym SET Utwórz tabelÚ zawierajÈcÈ kolumnÚ, która bÚdzie mogïa przechowy- waÊ dowolny podzbiór z wartoĂci: zielony, czerwony, niebieski. CREATE TABLE Test ( Kolor SET( zielony , czerwony , niebieski ) ); Atrybuty kolumn Kaĝda kolumna moĝe mieÊ dodatkowe atrybuty. NajczÚĂciej spoty- kane, które czÚsto przydajÈ siÚ przy pracy z bazÈ danych, to: PRIMARY KEY, NOT NULL, AUTO_INCREMENT, DEFAULT. Oprócz nich czÚsto stosowane sÈ takĝe INDEX i UNIQUE, zostanÈ jednak opisane dopiero w kolejnym podrozdziale, jako ĝe sÈ zwiÈzane z tzw. indeksami. PRIMARY KEY (klucz gïówny) Atrybut PRIMARY KEY oznacza, ĝe dana kolumna jest kluczem gïów- nym. JednoczeĂnie wymusza to indeksowanie tej kolumny (indeksy zostanÈ opisane w kolejnym podrozdziale; indeksowanie kolumny oznacza, ĝe wewnÈtrz bazy powstanie specjalna struktura porzÈd- kujÈca dane w kolumnie, co przyspiesza wiele operacji takich jak sortowanie czy przeszukiwanie) oraz zapis w kolejnych wierszach unikatowych wartoĂci (jest to zrozumiaïe, skoro klucz podstawowy musi jednoznacznie identyfikowaÊ kaĝdy wiersz). JeĂli kolumna ma byÊ kluczem gïównym, za jej podstawowÈ definicjÈ naleĝy umieĂciÊ sïowa PRIMARY KEY: CREATE TABLE nazwa_tabeli ( nazwa_kolumny typ_kolumny PRIMARY KEY, definicje pozostađych kolumn ); Kup książkęPoleć książkę 216 Notatki Kup książkęPoleć książkę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

MySQL. Darmowa baza danych. Ćwiczenia praktyczne. Wydanie II
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: