KWALIFIKACJA INF3 - STYCZEŃ 2020

PYTANIE NR 24.
W tabeli pracownicy zdefiniowano klucz główny typu INTEGER z atrybutami NOT NULL oraz AUTO_INCREMENT. Ponadto zdefiniowano pola imie oraz nazwisko. W przypadku zastosowania przedstawionej poniżej kwerendy SQL wprowadzającej dane, w której zostało pominięte pole klucza, w bazie danych MySQL nastąpi

INSERT INTO pracownicy (imie, nazwisko) VALUES ('Anna', 'Nowak');

A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Pomijając w INSERT kolumnę klucza głównego z AUTO_INCREMENT, MySQL może wstawić rekord, a wartość identyfikatora zostanie nadana automatycznie przez licznik. NOT NULL nie jest naruszone, bo baza nie zapisuje NULL, tylko kolejną wartość sekwencji.

Pełne wyjaśnienie:

W tabeli, w której klucz główny ma typ INTEGER, jest oznaczony jako NOT NULL oraz ma mechanizm AUTO_INCREMENT, baza danych przejmuje odpowiedzialność za nadawanie wartości identyfikatora. Instrukcja:

INSERT INTO pracownicy (imie, nazwisko) VALUES ('Anna', 'Nowak');

zawiera jawnie podaną listę kolumn (imie, nazwisko), więc liczba wartości w części VALUES odpowiada liczbie wskazanych pól. To oznacza, że nie występuje problem "nieprawidłowej liczby pól".

W MySQL (w typowej konfiguracji) jeśli wstawiasz rekord i nie podajesz wartości kolumny AUTO_INCREMENT, silnik przypisuje jej automatycznie następną wartość licznika. Dzięki temu warunek NOT NULL jest spełniony: do klucza głównego nie trafia NULL, tylko konkretna liczba.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • "zignorowanie polecenia, tabela pozostanie bez zmian" – poprawny INSERT nie jest ignorowany; jeśli nie ma naruszeń ograniczeń, rekord zostanie dodany.
  • "…zostanie przydzielona wartość NULL" – AUTO_INCREMENT służy właśnie temu, by nie trzeba było wstawiać NULL ani ręcznie nadawać identyfikatora. Przy poprawnym użyciu mechanizmu baza generuje wartość liczbową.
  • "błąd nieprawidłowej liczby pól" – taki błąd jest typowy, gdy nie podasz listy kolumn, a liczba wartości nie zgadza się z liczbą kolumn tabeli, albo gdy lista kolumn i VALUES mają różną długość. Tutaj lista i VALUES są spójne.

W praktyce to częsty wzorzec w aplikacjach internetowych: formularz przesyła dane imienia i nazwiska, a identyfikator rekordu jest generowany po stronie bazy.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
AUTO_INCREMENT oznacza, że MySQL automatycznie nadaje kolejną wartość liczbową dla wskazanej kolumny (zwykle klucza głównego). Dzięki temu podczas INSERT nie musisz podawać identyfikatora rekordu, bo baza zrobi to za Ciebie.
Można go pominąć, gdy kolumna klucza ma mechanizm AUTO_INCREMENT. Wtedy silnik bazy przypisuje identyfikator automatycznie. Warunek jest taki, że w INSERT podajesz listę kolumn, które rzeczywiście wypełniasz, i spełniasz inne ograniczenia tabeli.
Samo NOT NULL oznacza, że w kolumnie nie może znaleźć się wartość NULL. Jeśli jednak kolumna ma AUTO_INCREMENT, to przy pominięciu jej w INSERT MySQL wstawi konkretną liczbę (kolejną z licznika), więc ograniczenie NOT NULL nadal jest spełnione.
Taki błąd występuje, gdy liczba wartości w VALUES nie zgadza się z liczbą kolumn wskazanych w nawiasie po nazwie tabeli albo (gdy nie podasz listy kolumn) z liczbą kolumn tabeli. Poprawność zależy od zgodności "kolumny ↔ wartości".
W typowym użyciu nie. Gdy kolumna jest AUTO_INCREMENT, a w INSERT jej nie uwzględnisz, MySQL nada kolejną wartość licznika. Wstawienie NULL może mieć inne skutki tylko w specyficznych przypadkach konfiguracji i składni, dlatego na egzaminie przyjmuje się standardowe zachowanie.
Po wstawieniu rekordu możesz odczytać ostatnio nadaną wartość identyfikatora funkcją zwracaną przez MySQL (np. poprzez mechanizmy dostępne w sterowniku lub zapytanie typu LAST_INSERT_ID()). W aplikacjach WWW zwykle robi to warstwa dostępu do bazy.
Wzorzec INSERT INTO tabela (kol1, kol2) VALUES (w1, w2) oznacza, że wypełniasz tylko wskazane kolumny. Pozostałe kolumny dostaną wartości domyślne, zostaną uzupełnione automatycznie (np. AUTO_INCREMENT), albo spowodują błąd, jeśli wymagają wartości, a nie mają domyślnej.
Najczęstsze pomyłki to: zakładanie, że pominięta kolumna zawsze stanie się NULL, mylenie liczby kolumn tabeli z liczbą kolumn w liście INSERT oraz przekonanie, że brak podania klucza głównego uniemożliwia dodanie rekordu. Warto pamiętać o roli listy kolumn.
Najczęściej jest używany na kluczu głównym, ale technicznie może być też na kolumnie z indeksem spełniającym wymagania MySQL. W kontekście egzaminu zwykle przyjmuje się klasyczny układ: kolumna id jako PRIMARY KEY z AUTO_INCREMENT.
Najlepiej wykonać krótkie ćwiczenia: utwórz tabelę z id AUTO_INCREMENT i kolumnami tekstowymi, wstaw rekordy z i bez podania id, a potem sprawdź wynik SELECT. Utrwal też różnicę między podaniem listy kolumn a jej brakiem w INSERT.
info

Około 60% zdających odpowiada poprawnie na to pytanie. średnie

Specjaliści zwracają uwagę: "Pomijając w INSERT kolumnę klucza głównego z AUTO_INCREMENT, MySQL może wstawić rekord, a wartość identyfikatora zostanie nadana automatycznie przez licznik."

Źródła:

  • MySQL 8.0 Reference Manual: "INSERT Statement" (sekcja składni i zachowania przy podaniu listy kolumn), https://dev.mysql.com/doc/refman/8.0/en/insert.html - accessed 2026-03-02
  • MySQL 8.0 Reference Manual: "Using AUTO_INCREMENT" (zasady nadawania wartości i pominięcie kolumny), https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html - accessed 2026-03-02
  • MySQL 8.0 Reference Manual: "CREATE TABLE Statement" (opis atrybutów kolumn i ograniczeń, w tym NOT NULL), https://dev.mysql.com/doc/refman/8.0/en/create-table.html - accessed 2026-03-02

Materiały:

  • Dokumentacja MySQL: opis składni INSERT oraz zachowania AUTO_INCREMENT
  • Ćwiczenia praktyczne: tworzenie tabeli i testy INSERT z/bez podania wartości klucza
  • Materiały kursowe z podstaw baz danych dla technika informatyka (SQL DML i ograniczenia integralności)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego