-- Forma PEŁNA (zalecana) — wymieniamy kolumny INSERT INTO klienci (imie, nazwisko, email, telefon) VALUES ('Jan', 'Kowalski', 'jan@mail.com', '500111222'); -- Forma SKRÓCONA — wszystkie kolumny po kolei (niebezpieczna!) INSERT INTO klienci VALUES (NULL, 'Jan', 'Kowalski', 'jan@mail.com', '500111222'); -- NULL = AUTO_INCREMENT, kolejność musi być dokładnie jak w tabeli!
| Wartość | Opis | Przykład |
|---|---|---|
NULL | Brak wartości (kolumna musi dopuszczać NULL) | VALUES (NULL, 'tekst') |
DEFAULT | Użyj wartości domyślnej zdefiniowanej w tabeli | VALUES (DEFAULT, 'tekst') |
NOW() | Aktualna data i czas | VALUES ('Jan', NOW()) |
CURDATE() | Aktualna data | VALUES ('Jan', CURDATE()) |
UUID() | Unikalny identyfikator UUID | VALUES (UUID(), 'tekst') |
-- Wstawianie wielu wierszy naraz (znacznie wydajniejsze!) INSERT INTO kategorie (nazwa) VALUES ('Elektronika'), ('Odzież'), ('Książki'), ('Sport'), ('Dom i ogród'); -- INSERT ... SELECT — wstaw wyniki zapytania INSERT INTO archiwum_klientow (imie, nazwisko, email) SELECT imie, nazwisko, email FROM klienci WHERE aktywny = 0; -- skopiuj nieaktywnych do archiwum -- Kopiowanie całej tabeli INSERT INTO produkty_kopia SELECT * FROM produkty;
-- INSERT IGNORE: pomiń błędy (duplikat unikalnego klucza) INSERT IGNORE INTO kategorie (nazwa) VALUES ('Elektronika'); -- Jeśli 'Elektronika' już istnieje → brak błędu, pomiń -- ON DUPLICATE KEY UPDATE: upsert (update jeśli istnieje) INSERT INTO stany_magazynowe (id_produktu, ilosc) VALUES (10, 50) ON DUPLICATE KEY UPDATE ilosc = ilosc + VALUES(ilosc); -- Jeśli id_produktu=10 istnieje → dodaj 50 do aktualnej ilości -- Jeśli nie istnieje → wstaw nowy rekord -- REPLACE INTO: usuń stary, wstaw nowy (rzadziej używane) REPLACE INTO kategorie (id_kategorii, nazwa) VALUES (1, 'Elektronika i Multimedia');
INSERT IGNORE — po prostu pomiń kolizję (stara wartość zostaje)ON DUPLICATE KEY UPDATE — zaktualizuj istniejący rekord nową wartościąREPLACE INTO — usuń stary i wstaw nowy (resetuje AUTO_INCREMENT!)
| Kod błędu | Opis | Przykład | Rozwiązanie |
|---|---|---|---|
ERROR 1048 |
Column cannot be null — naruszenie NOT NULL | INSERT INTO klienci (email) VALUES (NULL) gdy email NOT NULL |
Podaj wartość dla kolumny NOT NULL |
ERROR 1062 |
Duplicate entry — duplikat wartości UNIQUE / PK | INSERT INTO klienci (email) VALUES ('jan@mail.com') — email już istnieje |
Użyj INSERT IGNORE lub ON DUPLICATE KEY UPDATE |
ERROR 1452 |
Cannot add child row — naruszenie FK | Wstaw produkt z id_kategorii=999 gdy kategoria 999 nie istnieje | Najpierw wstaw rekord rodzica (kategorię), potem dziecko (produkt) |
ERROR 1406 |
Data too long — wartość za długa dla kolumny | VARCHAR(10) z wartością dłuższą niż 10 znaków |
Rozszerz typ lub skróć wartość |
ERROR 1366 |
Incorrect integer value — błędny typ | Wstaw tekst 'abc' do kolumny INT | Dopasuj typ wartości do typu kolumny |
-- Przykład poprawnego INSERT z różnymi typami INSERT INTO produkty (nazwa, cena, ilosc_mag, id_kategorii, aktywny, dodano) VALUES ('Laptop Dell XPS 15', 4999.99, 5, 1, TRUE, NOW()), ('Mysz Logitech MX3', 299.00, 20, 1, TRUE, NOW()), ('T-Shirt bawełna', 59.90, 100, 2, TRUE, NOW()), ('Książka SQL w 24h', 49.00, 30, 3, FALSE, '2024-01-15');
Tabela klienci ma kolumny: id_klienta INT AUTO_INCREMENT PK, imie VARCHAR(50) NOT NULL, nazwisko VARCHAR(100) NOT NULL, email VARCHAR(200) UNIQUE, miasto VARCHAR(100) DEFAULT 'Warszawa'.
Napisz INSERT wstawiający klienta: Anna Nowak, anna@example.com, Kraków:
Tabela kategorie ma unikalny indeks na kolumnie nazwa. Rekord 'Elektronika' już istnieje. Co się stanie po wykonaniu:
INSERT IGNORE INTO kategorie (nazwa) VALUES ('Elektronika');
Poniższy INSERT zawiera błędy. Wskaż wszystkie problemy:
INSERT INTO produkty VALUES ('Laptop', 'cztery tysiące', 5, 1);
Tabela produkty: id INT AUTO_INCREMENT PK, nazwa VARCHAR(200) NOT NULL, cena DECIMAL(10,2) NOT NULL, ilosc INT, id_kategorii INT
INSERT INTO t (kol1, kol2) VALUES (v1, v2);VALUES (v1), (v2), (v3);INSERT IGNORE — pomija błędy duplikatów po cichuON DUPLICATE KEY UPDATE — upsert: wstaw lub aktualizuj istniejący