Tworzenie tabeli za pomocą polecenia CREATE TABLE

Stronę tą wyświetlono już: 196 razy

Polecenie CREATE TABLE umożliwia stworzenie tabeli, która w przyszłości będzie przechowywała rekordy danych. Aby jednak było możliwe prawidłowe korzystanie z tego polecenia trzeba poznać najpierw typy danych, jakie mogą być ustawione dla danej komórki tabeli. Oto przykład utworzenia tabeli z wykorzystaniem tego polecenia:

Listing 1
  1. CREATE TABLE books
  2. (
  3. id int unsigned not null auto_increment primary key,
  4. title char(255) not null,
  5. author char(255) not null
  6. );

Nazwa tabeli tworzonej w tym przypadku to books, składa się ona z trzech pól:

  • pierwszego o nazwie id, przechowującego typ int unsigned (całkowity bez znaku). Kolejne instrukcje to:
    • not null - czyli wpis nie może mieć wartości 0;
    • polecenie auto_increment oznacza automatyczne dodawanie wartości tego pola (automatycznie przy dodawaniu danych będzie ustawiał to pole na wartość o 1 większą od ostatnio wstawionej wartości);
    • primary key oznacza, że jest to klucz główny tej tabeli. W danej tabeli może istnieć tylko jeden klucz główny.
  • drugiego pola o nazwie title przyjmującego ciąg 255 znaków char(255);
  • trzeciego pola o nazwie author przyjmującego również ciąg 255 znaków char(255).

Do powyższego zapytania można dodać warunek IF NOT EXISTS w następujący sposób:

Listing 2
  1. CREATE TABLE IF NOT EXISTS books
  2. (
  3. id int unsigned not null auto_increment primary key,
  4. title char(255) not null,
  5. author char(255) not null
  6. );

jeżeli nie ma się pewności, czy tabela o podanej nazwie już nie istnieje.

Typy danych

Typy liczbowe dzielą się na dwie główne grupy:

  • całkowite, które z kolei można podzielić na:
    • całkowite ze znakiem;
    • całkowite bez znaku - wymagają użycia dodatkowego słowa UNSIGNED z nazwą typu całkowitego ze znakiem
  • zmiennoprzecinkowe

Typy liczb całkowitych

Poniżej zamieszczam tabelkę opisującą podstawowe typy danych liczbowych całkowitych:

TypZakresObszar pamięci zajmowanej w bajtach
Listing 3
  1. TINYINT[(W)]
  2. BIT
  3. BOOL
-127 do 128
0 do 255
1
Listing 4
  1. SMALLINT
-32768 do 32767
0 do 65535
2
Listing 5
  1. MEDIUMINT[(W)]
-8388608 do 8388607
0 do 16777215
3
Listing 6
  1. INT[(W)]
  2. INTEGER[(W)]
-231 do 231 - 1
0 do 232 - 1
4
Listing 7
  1. BIGINT[(W)]
-263 do 263 - 1
0 do 264 - 1
8

W powyższej tabelce dla równoważnych typów danych zapisane zostały zakresy ich wartości:

  • u góry - dla liczb całkowitych ze znakiem
  • u dołu - dla liczb całkowitych bez znaku, czyli np. INT UNSIGNED.

Oznaczenie W w nawiasach kwadratowych oznacza długość wyświetlania liczby. Podanie tej wartości jest opcjonalne (można pominąć)

Typy liczb zmiennoprzecinkowych

Poniżej zamieszczam tabelkę opisującą podstawowe typy danych liczbowych zmiennoprzecinkowych:

TypZakresObszar pamięci zajmowanej w bajtachOpis dodatkowy
Listing 8
  1. FLOAT(precyzja)
zależne od ustawienia wartości precyzja
różnyprecyzja -określa ilu bajtowa będzie to liczba
Listing 9
  1. FLOAT[(W, L)]
±1,175494351E-38
±3,40283466E+38
4Liczba zmiennoprzecinkowa pojedynczej precyzji (to samo co FLOAT(4), umożliwia określenie szerokości wyświetlania W i znaczących cyfr po przecinku L.
Listing 10
  1. DOUBLE[(W, L)]
  2. DOUBLE PRECISION[(W, L)]
  3. REAL[(W, L)]
±1,7976931348623157E-308
±2,2250738585072014E+308
8Liczba zmiennoprzecinkowa podwójnej precyzji (to samo co FLOAT(8), umożliwia określenie szerokości wyświetlania W i znaczących cyfr po przecinku L.
Listing 11
  1. DECIMAL[(W[, L])]
  2. NUMERIC[(W, L)]
  3. DEC[(W, L)]
  4. FIXED[(W, L)]
zmienny
W+2Liczba zmiennoprzecinkowa przechowywana jako CHAR. Ten typ danych przydaje się, gdy trzeba kontrolować precyzję przy operacjach na liczbach zmiennoprzecinkowych (np. waluta), umożliwia określenie szerokości wyświetlania W i znaczących cyfr po przecinku L.

Typy przechowywania daty i czasu

W SQL-u dostępnych jest kilka typów umożliwiających przechowywanie daty i czasu. Ciekawą właściwością pól tego typu jest to, że przy wstawianiu rekordu do bazy danych i pozostawieniu danego pola daty lub czasu jako puste wstawiana jest automatycznie bieżąca data. Oto dostępne typy obsługujące datę i czas:

TypZakresOpis dodatkowy
1000-01-01 do 9999-12-31
Data w formacie RRRR-MM-DD (np. 2016-12-01)
-838:59:59 do 838:59:59
Czas w formacie GG-MM-SS (np. 09:09:09)
Listing 14
  1. DATETIME
1000-01-01 00:00:00 do 9999-12-31 23:59:59
Data i czas w formacie RRRR-MM-DD GG:MM:SS (np. 2016-12-01 09:09:09)
Listing 15
  1. TIMESTAMP[(W)]
1970-01-01 00:00:00 do 2037-01-01 00:00:00
Typ używany dla transakcji. Wartość parametru W wpływa na format wyświetlania.
Listing 16
  1. YEAR[(2 lub 4)]
70 do 69 (1970 do 2069) lub 1901 do 2155
Typ przechowujący rok w formacie cztero lu dwucyfrowej. Każdy z nich ma oddzielny zakres.

Dla typu TIMESTAMP format wyświetlania daty w zależności od parametru W pokazuje poniższa tabelka.

TypFormat
Listing 17
  1. TIMESTAMP
  2. TIMESTAMP(14)
RRRR-MM-DD GG:MM:SS
Listing 18
  1. TIMESTAMP(12)
RR-MM-DD GG:MM:SS
Listing 19
  1. TIMESTAMP(10)
RR-MM-DD GG:MM
Listing 20
  1. TIMESTAMP(8)
RRRR-MM-DD
Listing 21
  1. TIMESTAMP(6)
RR-MM-DD
Listing 22
  1. TIMESTAMP(4)
RR-MM
Listing 23
  1. TIMESTAMP(2)
RR

Typy łańcuchowe

Typy krótkie tekstowe o stałej lub zmiennej długości znaków:

TypZakresDodatkowy opis
Listing 24
  1. [NATIONAL] CHAR(W) [BINARY lub ASCII lub UNICODE]
1-255 znakówTyp przechowujący stałą liczbę znaków o długości W, jeżeli wprowadzony ciąg jest krótszy od W to zmienna i tak będzie zajmowała W znaków pamięci, gdy dłuższy to wstawia tylko tą część, która się mieści. Ustawienia:
  • NATIONAL - wymusza użycie domyślnego zbioru znaków, który i tak jest domyślnie wykorzystywany przez MySQL-a;
  • BINARY - wyłącza rozpoznawanie wielkości liter (domyślnie rozpoznawane);
  • UNICODE wskazuje, że bedzie wykorzystywany zastaw znaków ucs.
1 znakJest to to samo co CHAR(1)
Listing 26
  1. [NATIONAL] VARCHAR(W) [BINARY]
1 - 255 znakówW tym przypadku zmienna będzie dynamicznie dostosowywać swój rozmiar do wstawionego tekstu. Maksimum dla tego typu zmiennej określa parametr W.

Kolejny typ danych to TEXT - przechowujący zmienną ilość tekstu i BLOB - przechowująca dane binarne. Oto zestawienie tych typów danych:

TypZakres
Listing 27
  1. TINYBLOB
255 znaków
Listing 28
  1. TINYTEXT
255 znaków
65 535 znaków
65 535 znaków
Listing 31
  1. MEDIUMBLOB
16 777 215 znaków
Listing 32
  1. MEDIUMTEXT
16 777 215 znaków
Listing 33
  1. LONGBLOB
4 294 967 295 znaków
Listing 34
  1. LONGTEXT
4 294 967 295 znaków

Ostatni rodzaj typów to typy enumeryczne, umożliwiająca stworzenie własnej listy wartości dopuszczalnych do wprowadzenia w danym polu tabeli. Oto one:

TypMaksymalna liczba elementów zbioruOpis dodatkowy
Listing 35
  1. ENUM('wartość1', 'wartość2', ...)
65 353Komórka tabeli tego typu może przyjąć tylko jedną z dozwolonych wartości;
Listing 36
  1. SET('wartość1', 'wartość2', ...)
64Komórka tabeli tego typu może przyjąć tylko dowolny podzbiór dozwolonych wartości lub NULL.

Tworzenie tabelki z poziomu konsoli systemowej

Utwórzmy więc małą tabelkę w nowej bazie danych:

mysql -u root -p
password: **************
mysql> CREATE DATABASE library DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> USE library;
Database changed
mysql> 

USE library;
mysql> CREATE TABLE books (id int unsigned not null auto_increment primary key,
     > title char(255) not null,
     > author char(255) not null
     > );
Query OK, 1 row affected (0.33 sec)

mysql> DESCRIBE books;
+--------+------------------+------+-----+---------+----------------+
| Field  | Type             | Null | Key | Default | Extra          |
+--------+------------------+------+-----+---------+----------------+
| id     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title  | char(255)        | NO   |     | NULL    |                |
| author | char(255)        | NO   |     | NULL    |                |
+--------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Komentarze