id int NOT NULL AUTO_INCREMENT W bazie MySQL zdefiniowano podczas tworzenia tabeli pole id. Wpis AUTO_INCREMENT oznacza, że
id int NOT NULL AUTO_INCREMENTW bazie MySQL zdefiniowano podczas tworzenia tabeli pole id. Wpis
AUTO_INCREMENT oznacza, żeA. pole id będzie mogło przyjmować wartości: NULL, 1, 2, 3, 4 i tak dalej.
B. wartość pola id zostanie automatycznie nadana przez bazę i będzie to wygenerowana losowo liczba całkowita.
C. dozwolone jest dodawanie rekordu z dowolną wartością pola id.
D. wartości pola będą automatycznie generowane podczas dodawania nowego rekordu do bazy.
Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).
AUTO_INCREMENT w MySQL oznacza, że baza danych sama nada wartość temu polu podczas wstawiania nowego rekordu, o ile nie podasz jej ręcznie w instrukcji INSERT. W praktyce takie pole bardzo często pełni rolę klucza głównego, np. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY. Dzięki temu każdy nowy wiersz dostaje kolejną wartość liczbową, najczęściej 1, 2, 3, 4 itd. Nie jest to liczba losowa, tylko wartość wyznaczana przez licznik tabeli. To bardzo wygodne przy identyfikowaniu rekordów, np. użytkowników, produktów, zamówień czy wpisów bloga. Z mojego doświadczenia to jedna z podstawowych dobrych praktyk w projektowaniu tabel: sztuczny identyfikator liczbowy jako prosty, stabilny klucz. Warto też pamiętać, że AUTO_INCREMENT zwykle łączy się z NOT NULL oraz indeksem PRIMARY KEY albo UNIQUE, bo identyfikator powinien być jednoznaczny. Jeżeli usuniesz rekord o id 5, MySQL normalnie nie musi ponownie używać tej wartości, więc mogą pojawić się przerwy w numeracji. I to jest okej, id ma identyfikować rekord, a nie zawsze tworzyć idealnie ciągłą listę numerów.
W tym zapisie najważniejsze jest zrozumienie, że AUTO_INCREMENT nie oznacza pełnej dowolności przy wpisywaniu wartości do kolumny id. Owszem, w MySQL czasem technicznie da się podać własną wartość dla takiej kolumny, jeśli nie łamie ona ograniczeń klucza i typu danych, ale nie to jest sensem tej właściwości. Jej głównym zadaniem jest automatyczne nadawanie kolejnych identyfikatorów przy dodawaniu rekordów, bez ręcznego pilnowania numeracji przez programistę. Częsty błąd polega na myleniu AUTO_INCREMENT z możliwością wpisania czegokolwiek albo z mechanizmem losowania liczb. MySQL nie generuje tu przypadkowej liczby całkowitej, tylko korzysta z wewnętrznego licznika tabeli. Dlatego po rekordzie z id 10 następny zwykle otrzyma id 11, a nie np. 43821. Nie należy też zakładać, że pole będzie przyjmowało NULL jako normalną wartość, bo w definicji występuje NOT NULL. Gdy podczas INSERT pominiemy id albo podamy NULL w typowym użyciu, baza potraktuje to jako sygnał do wygenerowania następnej wartości, ale zapisany w tabeli identyfikator nie będzie NULL. Moim zdaniem tu najłatwiej pomylić opis działania z listą możliwych wartości. AUTO_INCREMENT mówi o mechanizmie automatycznego przydzielania wartości, a nie o tym, że kolumna ma specjalnie przechowywać NULL, wartości losowe albo dowolne identyfikatory według uznania użytkownika. W projektowaniu baz danych taki identyfikator stosuje się po to, żeby rekordy były łatwe do jednoznacznego wskazania, łączenia w relacjach i obsługi w aplikacji.