[MySQL] Co oznaczają liczby przy typach liczbowych INT(11)?

0
609
Rate this post

Kiedy pracujesz z bazą danych MySQL, na pewno zauważysz różne typy danych dla kolumn. Jednym z najczęściej używanych typów danych są liczby całkowite, czyli INT. Ale co oznacza liczba w nawiasach, jak INT(11)? Czy to ma coś wspólnego z rozmiarem czy długością pola? Odpowiedź na to pytanie nie jest jednoznaczna i wymaga głębszego zrozumienia działania MySQL.

Pojęcie liczby całkowitej w MySQL

Zacznijmy od podstaw. INT to skrót od „integer”, co oznacza liczbę całkowitą. W MySQL, standardowy rozmiar dla INT to 4 bajty, co oznacza, że może przechowywać liczby od -2,147,483,648 do 2,147,483,647 dla liczb ze znakiem i od 0 do 4,294,967,295 dla liczb bez znaku.

Co oznacza liczba w nawiasie?

Liczba w nawiasie, np. INT(11), jest często myląca. W przeciwieństwie do powszechnego przekonania, nie oznacza ona maksymalnej długości liczby, którą można przechować w tym polu. Liczba ta określa tzw. „display width” (szerokość wyświetlania), co jest ważne tylko wtedy, gdy używasz flagi ZEROFILL.

ZEROFILL i display width

Jeśli określisz kolumnę jako INT(11) ZEROFILL, MySQL wypełni zerami wartości w tej kolumnie, aby osiągnąć „display width” równy 11. Na przykład, jeżeli wpiszesz wartość 5, MySQL zapisze ją jako 00000000005.

Nieefektywne użycie

Wartości szerokości wyświetlania nie zmieniają właściwości ani rozmiaru typu danych. Czyli nawet jeśli określisz kolumnę jako INT(1) lub INT(20), nadal będzie ona zajmować 4 bajty i będzie mogła przechowywać tę samą gamę liczb.

Czy warto używać?

W praktyce, wielu programistów zaniedbuje tę opcję, ponieważ nie wpływa ona na wydajność ani przechowywane dane. Jest ona bardziej użyteczna w kontekście raportowania i prezentacji danych, gdzie czasem jest potrzeba, by wyświetlić liczby w określonym formacie.

Alternatywy

Jeżeli chodzi o optymalizację, zamiast zastanawiać się nad znaczeniem INT(11), warto zastanowić się, czy zamiast INT nie lepiej użyć SMALLINT, MEDIUMINT, czy TINYINT. Każdy z tych typów używa mniej bajtów i może być bardziej odpowiedni, jeśli zakres przechowywanych liczb jest mniejszy.

Zatem, mówiąc wprost, liczba w nawiasie po INT w MySQL nie ma znaczenia dla przechowywania czy wydajności. Jest to raczej opcja formatowania, która staje się istotna tylko, gdy używamy flagi ZEROFILL.

Oczywiście, to nie koniec tematu. MySQL oferuje szereg innych opcji i funkcji, które mogą wpływać na przechowywanie i manipulację danymi liczbowymi, takimi jak funkcje matematyczne, procedury składowane czy triggery. Ale to już temat na kolejny artykuł.

Funkcje matematyczne w MySQL

Rozważmy teraz bardziej zaawansowane funkcje MySQL, które można stosować na typach liczbowych, takich jak INT. Funkcje matematyczne w MySQL są bogate i różnorodne, pozwalające na różne obliczenia, od prostych operacji dodawania i odejmowania do bardziej skomplikowanych funkcji trygonometrycznych.

Proste operacje

  • ABS(): Zwraca wartość bezwzględną liczby.
  • CEIL(): Zaokrąglenie w górę.
  • FLOOR(): Zaokrąglenie w dół.
  • ROUND(): Zaokrąglenie do najbliższej liczby całkowitej.

Przykładowe użycie:

sql
SELECT ABS(-10), CEIL(7.3), FLOOR(7.8), ROUND(8.5);

Funkcje trygonometryczne

  • SIN(): Zwraca sinus kąta.
  • COS(): Zwraca cosinus kąta.
  • TAN(): Zwraca tangens kąta.

Te funkcje są użyteczne, na przykład, w aplikacjach naukowych lub inżynieryjnych, gdzie obliczenia trygonometryczne są kluczowe.

Funkcje statystyczne

MySQL oferuje również funkcje statystyczne, takie jak:

  • AVG(): Średnia wartości.
  • SUM(): Suma wartości.
  • MIN(): Minimalna wartość.
  • MAX(): Maksymalna wartość.

Dzięki temu, nawet bez opuszczenia środowiska MySQL, można przeprowadzić pewne analizy danych.

Procedury składowane i triggery

Innym zaawansowanym zagadnieniem są procedury składowane i triggery, które mogą być użyte w kombinacji z typami liczbowymi. Na przykład, można utworzyć procedurę, która automatycznie aktualizuje pewne pola w rekordach na podstawie obliczeń wykonanych na innych polach.

Procedury składowane

Procedury składowane to zestawy poleceń SQL, które są przechowywane w bazie danych i mogą być wywoływane jako jedna jednostka. Są szczególnie użyteczne, gdy potrzebujesz wykonać wiele operacji w jednej transakcji.

sql
DELIMITER //
CREATE PROCEDURE CalculateTotalPrice(IN orderID INT)
BEGIN
DECLARE total_price INT;
SELECT SUM(price * quantity) INTO total_price FROM order_details WHERE order_id = orderID;
UPDATE orders SET total_price = total_price WHERE id = orderID;
END;
//
DELIMITER ;

Triggery

Triggery są automatycznymi akcjami wyzwalanymi przez różne operacje na bazie danych, takie jak INSERT, UPDATE czy DELETE. Na przykład, można utworzyć trigger, który automatycznie aktualizuje pole z sumą po każdym dodaniu nowego rekordu do tabeli.

sql
DELIMITER //
CREATE TRIGGER update_total_price AFTER INSERT ON order_details
FOR EACH ROW
BEGIN
CALL CalculateTotalPrice(NEW.order_id);
END;
//
DELIMITER ;

Te zaawansowane funkcje pozwalają na bardzo skomplikowane manipulacje danymi, a zrozumienie ich potencjału może znacząco zwiększyć twoją efektywność jako programisty baz danych.

Optymalizacja zapytań i indeksowanie

Jako kontynuacja dyskusji na temat typów liczbowych i ich zaawansowanego wykorzystania w MySQL, warto też zwrócić uwagę na aspekty związane z optymalizacją. Poprawne wykorzystanie typów danych to tylko początek; równie ważne jest zrozumienie, jak efektywnie indeksować kolumny oraz jak optymalizować zapytania.

Indeksowanie kolumn liczbowych

Indeksy są jednym z najważniejszych mechanizmów optymalizacyjnych w bazach danych. W kontekście kolumn liczbowych, indeksy są szczególnie efektywne, ponieważ bazy danych mają łatwiejsze zadanie z sortowaniem i przeszukiwaniem wartości liczbowych niż tekstowych. Dobrze zaplanowane indeksy mogą znacznie przyspieszyć zapytania, które korzystają z filtrów (WHERE) lub sortowania (ORDER BY).

Na przykład, jeśli masz kolumnę id określoną jako INT i często wykonujesz zapytania, które filtrują dane na podstawie tej kolumny, warto utworzyć dla niej indeks:

sql
CREATE INDEX idx_id ON tabela(id);

EXPLAIN – narzędzie do analizy zapytań

Jednym z najbardziej użytecznych narzędzi w MySQL do analizy i optymalizacji zapytań jest polecenie EXPLAIN. Pozwala ono na zrozumienie, jak baza danych interpretuje dane zapytanie i jakie operacje wykonuje.

Przykładowe użycie:

sql
EXPLAIN SELECT * FROM tabela WHERE id = 5;

Polecenie to zwróci szereg informacji, takich jak typ zapytania, użyte indeksy czy też liczbę przeskanowanych wierszy. Te informacje mogą być kluczowe do zrozumienia, jak optymalizować dane zapytanie.

Obsługa transakcji

Kolejnym zaawansowanym aspektem pracy z MySQL są transakcje. Mechanizm transakcji umożliwia grupowanie jednego lub więcej zapytań SQL w jedną operację, która jest atomowa, spójna, izolowana i trwała (zgodnie z modelem ACID).

Rozpoczynanie i zakończenie transakcji

Rozpoczęcie transakcji odbywa się za pomocą polecenia START TRANSACTION, a jej zakończenie za pomocą COMMIT (zatwierdzenie zmian) lub ROLLBACK (anulowanie zmian).

sql
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Transakcje są szczególnie użyteczne w przypadku złożonych operacji, które wymagają zachowania spójności danych. Na przykład, przy przenoszeniu środków pomiędzy kontami bankowymi, ważne jest, aby obie operacje (odebranie i dodanie środków) zostały wykonane razem, jako jedna transakcja.

Dobrze zrozumiane i efektywnie wykorzystane funkcje MySQL, takie jak indeksowanie, analiza zapytań czy transakcje, mogą znacząco zwiększyć wydajność i niezawodność aplikacji. Warto zatem poświęcić czas na zgłębienie tych zaawansowanych funkcji, nawet jeśli na pierwszy rzut oka wydają się one skomplikowane czy nieintuicyjne.