Jedną z kategorii typów danych w MySQL 8 są liczby całkowite. W zależności od wielkości liczby, jaką chcemy przedstawić, możemy zastosować typ, który zajmie jak najmniej miejsca w bazie danych. Na powyższym screenie możemy zaobserwować różnice między poszczególnymi typami danych dla liczby całkowitych.
Oto lista tych typów danych wraz z liczbą bajtów jakie zajmują:
- TINYINT – 1bajt,
- SMALLINT – 2 bajty,
- MEDIUMINT 3 bajty,
- INT – 4 bajty, synonimem jest INTEGER,
- BIGINT – 8 bajty.
Każdy z typów danych dla liczb całkowitych może mieć dodatkowo dodany atrybut UNSIGNED, domyślnym atrybutem jest SIGNED, którego nie musimy podawać. Atrybut UNSIGNED informuje, że w kolumnie o danym typie danych można przechowywać tylko liczby całkowite nieujemne, dzięki czemu ich zakres jest większy jeśli chodzi o wielkość liczb. Bez tego atrybut przedział jest od liczb ujemnych do dodatnich, ale z kolei największa liczba dodatnia jest mniejsza. Możemy to zauważyć na przykładzie typu danych TINYINT. Dla tego typu domyślnie kolumna może przechowywać wartości od -128 do 127, bo maksymalnie liczba może zająć tylko 1 bajt, a 1 bajt to dwa (bo bit 0 lub 1) do potęgi osiem (1 bajt składa się z 8 bitów) co daje 256 możliwych liczb. Największa jest 127. Ale z atrybutem UNSIGNED jest to zakres od 0 do 255. Wszystko zależy więc od tego, czy będziemy wstawiać liczby ujemne, czy nie. Podobnie wygląda to dla pozostałych typów danych liczb całkowitych.
Przejdźmy zatem do przykładów w konsoli MySQL. Ustawmy jakąś dowolną bazę bieżącą, u mnie jest to test (
USE test;
):
Tworzymy w bazie danych tabelę o nazwie t:
CREATE TABLE t (col
tinyint
);
Wstawmy teraz do tabeli liczbę -100 oraz liczbę 0 i liczbę 120:
INSERT INTO t VALUES(-100);
INSERT INTO t VALUES(0);
INSERT INTO t VALUES(120);
Jak widać zarówno ujemna, jak i dodatnia liczba zostały wstawione. A teraz spróbujmy coś spoza zakresu tego typu danych np. liczbę 130 :
INSERT INTO t VALUES(
130
);
Tym razem ta wartość nie została wstawiona, bo zakres kończy się na liczbie 128 .
Usuńmy zatem tą tabelę i utwórzmy nową z tym samym typem danych ale z atrybutem UNSIGNED ;
DROP TABLE t;
CREATE TABLE t (col tinyint
UNSIGNED
);
A teraz spróbujmy wstawić liczbę 130 do tabeli z atrybutem UNSIGNED :
INSERT INTO t VALUES(130);
Tym razem wiersz został wstawiony. A co z liczbą ujemną np. -10 :
INSERT INTO t VALUES(
-10
);
Niestety, tabela nie pozwoliła na wstawienie liczby ujemnej dla kolumny z atrybutem UNSIGNED, liczba ujemna jest poza zakresem dopuszczalnych wartości dla tej kolumny.
Co ciekawe do kolumny typu całkowitoliczbowego możemy wstawić tak jak do kolumny typu
BIT
, wartości
boolean
:
false
,
true
.
Po przekazaniu do kolumny wartości
false
, pojawi się zero, a po wstawieniu wartości
true
liczba 1.
Pozostałe typy danych liczb całkowitych działają tak samo, różnica polega jedynie na większym zakresie dopuszczalnych wartości.
Dla typu danych BIGINT ( dużych liczb całkowitych), który chcemy ustawić na kolumnie jako wartości unikalne nieujemne z zakazem wstawiania NULL automatycznie generowane , możemy użyć aliasu SERIAL. Często jest używany dla klucza głównego dla tabel o przewidywanej dużej liczby wierszy, który nie powinien przyjmować NULL, być unikalny:
SERIAL
to to samo co
BIGINT
UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE