Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 8221 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:

CREATE TABLE books ( id int unsigned not null auto_increment primary key, title char(255) not null, author char(255) not null );

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

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

CREATE TABLE IF NOT EXISTS books ( id int unsigned not null auto_increment primary key, title char(255) not null, author char(255) not null );

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:

Typy liczb całkowitych

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

TINYINT[(W)] BIT BOOL
SMALLINT
MEDIUMINT[(W)]
INT[(W)] INTEGER[(W)]
BIGINT[(W)]

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

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:

FLOAT(precyzja)
FLOAT[(W, L)]
DOUBLE[(W, L)] DOUBLE PRECISION[(W, L)] REAL[(W, L)]
DECIMAL[(W[, L])] NUMERIC[(W, L)] DEC[(W, L)] FIXED[(W, 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:

DATE
TIME
DATETIME
TIMESTAMP[(W)]
YEAR[(2 lub 4)]

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

TIMESTAMP TIMESTAMP(14)
TIMESTAMP(12)
TIMESTAMP(10)
TIMESTAMP(8)
TIMESTAMP(6)
TIMESTAMP(4)
TIMESTAMP(2)

Typy łańcuchowe

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

[NATIONAL] CHAR(W) [BINARY lub ASCII lub UNICODE]
Typ 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.
CHAR
[NATIONAL] VARCHAR(W) [BINARY]

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

TINYBLOB
TINYTEXT
BLOB
TEXT
MEDIUMBLOB
MEDIUMTEXT
LONGBLOB
LONGTEXT

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:

ENUM('wartość1', 'wartość2', ...)
SET('wartość1', 'wartość2', ...)

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)