Zanim przejdziemy do szerszego omówienia tworzenia tabel, omówimy najpierw typy danych, z których może być zbudowana tabela. Postaram się w jak najprostszy sposób wyjaśnić najbardziej używane typy – po więcej szczegółów zapraszam do oficjalnej dokumentacji MySQL.
Sprawdź więcej – dokumentacja MySQL o typach danych
Typy numeryczne
Typy całkowite
Typy te określają dane jako format liczbowy (warunki także są zapisane w tym formacie np. boolean to tinyint). W nawiasach podałem wielkość danych. Wyróżniamy:
- TINYINT = 1 bajt (8 bit)
- SMALLINT = 2 bajty (16 bit)
- MEDIUMINT = 3 bajty (24 bit)
- INT = 4 bajty (32 bit)
- BIGINT = 8 bajtów (64 bit)

Co do ostatniego typu BIGINT – warto uważać na używanie na nim działań arytmetycznych – więcej znajdziesz w dokumentacji.
Przykład użycia: int(10) – liczba 10 określa ile cyfr ma się wyświetlać, w bazie przechowywana jest jednak oryginalna wartość JEDNAK ma to znaczenie tylko w przypadku użycia dodatkowego atrybutu ZEROFILL.
Typy zmiennoprzecinkowe
Jak sama nazwa wskazuje typy zmiennoprzecinkowe przechowują liczbę z wartością po przecinku. Zaliczamy do nich typy:
- DECIMAL (precyzja, liczba miejsc po przecinku) – np. przy decimal(10,5) nasza liczba może mieć maksymalnie 10 cyfr, łącznie z tymi co znajdują się po przecinku. Maksymalnie po przecinku możemy mieć 5 cyfr, w przypadku większej ilości 5 liczba po przecinku będzie zaokrąglana. Maksymalna precyzja (ilość cyfr) to 65, a liczba cyfr po przecinku to 30.
- DEC (to inaczej DECIMAL)
istnieją również FLOAT oraz DOUBLE, jednak zostaną one usunięte z MySQL 8.0.17 więc nie zamierzam dodawać ich tutaj do listy.
Typ bitowy
BIT = wielkość do 64-bit. Do zapisania liczby w takiej postaci musimy użyć litery b a następnie w apostrofach dodać reprezentację bitową takiej liczby.
np. b’111′ to dziesiętnie 7
W przypadku przypisania kolumnie wartość mniejszą niż ona określa, liczba zostanie wypełniona zerami po lewej stronie.
liczba bit(6) -> dodajemy wartość b’101′ -> otrzymamy b’000101′
Typy daty i czasu
- DATE
- TIME
- DATETIME (dokładny czas, który się nie zmieni)
- TIMESTAMP (czas może się zmienić w zależności od strefy czasowej)
- YEAR

Używając typów daty i czasu, umieszczając wartości podajemy je w apostrofach z wyjątkiem typu YEAR. Warto zaznaczyć, że typ DATETIME nie zmienia danych w przypadku użycia innej strefy czasowej, natomiast typ TIMESTAMP tak.
Typy znakowe
Więcej informacji o typach znakowych znajdziesz tutaj.
Rodzaje:
- CHAR (zawsze zajmuje tyle miejsca ile ustalono; długość od 0 do 255)
- VARCHAR (zajmuje miejsce dynamicznie; długość od 0 do 65535)
- BINARY (to samo co CHAR tylko dane są zapisywane binarnie)
- VARBINARY (to samo co VARCHAR tylko dane są zapisywane binarnie)
- BLOB (do dużych danych zapisywanych binarnie np. zdjęcia)
- TEXT (do dużych danych zapisywanych tekstowo np. ten wpis na blogu)
- ENUM (może wybrać jedno z określonego zestawu danych)
- SET (możemy wybrać wiele z określonego zestawu danych)
CHAR używamy gdy dane zawsze będą miały tyle samo miejsca, natomiast VARCHAR gdy dane będą miały różną długość. Maksymalna długość CHAR to od 0 do 255 znaków – VARCHAR od 0 do 65535 znaków. BLOB oraz TEXT mają swoje rodzaje: TINYBLOB, BLOB, MEDIUMBLOB i LONGBLOB oraz TINYTEXT, TEXT, MEDIUMTEXT i LONGTEXT (ich wymiary zostały podane na zdjęciu poniżej)
Rozmiary z dokumentacji:

Różnica między polami ENUM a SET polega na tym, że ENUM to takie pola radio, możemy wybrać tylko jedną opcję z listy, natomiast SET to taki checkbox, możemy wybrać wiele opcji.
Pozostałe typy danych
Nie umieściłem tutaj wszystkich typów danych, ponieważ ten kurs ma nauczyć ciebie MySQL w stopniu podstawowym a nie zaawansowanym. Więcej informacji o typach danych znajdziesz tutaj.