Generator instrukcji SQL INSERT
Generuj kwerendy SQL INSERT z danych CSV lub formularza. Obsługuje MySQL, PostgreSQL, SQLite. Bulk insert, escape wartości. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Instrukcji INSERT
Tabela
Dialekt SQL
Linie
Rozmiar
-- Dane testowe: generator instrukcji SQL INSERT (webp.pl) -- Wierszy: 25 | Dialekt: mysql -- Format kolumn: nazwa:typ (int, uuid, email, varchar(n), text, date, datetime, boolean, decimal, json, enum(a,b,c)) START TRANSACTION; INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (1, 'Piotr Woźniak', '[email protected]', '2026-11-09 22:46:33', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (2, 'Katarzyna Nowak', '[email protected]', '2026-11-09 22:45:56', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (3, 'Tomasz Szymański', '[email protected]', '2026-11-09 22:45:19', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (4, 'Magdalena Wiśniewska', '[email protected]', '2026-11-09 22:44:42', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (5, 'Paweł Dąbrowski', '[email protected]', '2026-11-09 22:44:05', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (6, 'Agnieszka Wójcik', '[email protected]', '2026-11-09 22:43:28', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (7, 'Michał Mazur', '[email protected]', '2026-11-09 22:42:51', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (8, 'Joanna Kamińska', '[email protected]', '2026-11-09 22:42:14', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (9, 'Krzysztof Kaczmarek', '[email protected]', '2026-11-09 22:41:37', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (10, 'Zofia Lewandowska', '[email protected]', '2026-11-09 22:41:00', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (11, 'Jakub Jankowski', '[email protected]', '2026-11-09 22:40:23', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (12, 'Anna Woźniak', '[email protected]', '2026-11-09 22:39:46', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (13, 'Piotr Nowak', '[email protected]', '2026-11-09 22:39:09', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (14, 'Katarzyna Szymańska', '[email protected]', '2026-11-09 22:38:32', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (15, 'Tomasz Wiśniewski', '[email protected]', '2026-11-09 22:37:55', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (16, 'Magdalena Dąbrowska', '[email protected]', '2026-11-09 22:37:18', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (17, 'Paweł Wójcik', '[email protected]', '2026-11-09 22:36:41', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (18, 'Agnieszka Mazur', '[email protected]', '2026-11-09 22:36:04', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (19, 'Michał Kamiński', '[email protected]', '2026-11-09 22:35:27', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (20, 'Joanna Kaczmarek', '[email protected]', '2026-11-09 22:34:50', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (21, 'Krzysztof Lewandowski', '[email protected]', '2026-11-09 22:34:13', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (22, 'Zofia Jankowska', '[email protected]', '2026-11-09 22:33:36', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (23, 'Jakub Zieliński', '[email protected]', '2026-11-09 22:32:59', 0); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (24, 'Anna Nowak', '[email protected]', '2026-11-09 22:32:22', 1); INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (25, 'Piotr Szymański', '[email protected]', '2026-11-09 22:31:45', 0); COMMIT;
Wiersze opisują dokładnie to, co silnik wpisuje do wyniku przy aktualnych ustawieniach formularza — łącznie z pierwszą instrukcją wygenerowaną dla Twojej tabeli i kolumn.
| Element | W generowanym kodzie | Znaczenie |
|---|---|---|
| Instrukcja | INSERT INTO tabela (kolumny) VALUES (…); | jedno INSERT na wiersz danych — silnik NIE skleja wielu wierszy w jedno wielowierszowe VALUES (buildSql pętli po wierszach) |
| Cytowanie identyfikatorów | `tabela`, `kolumna` | MySQL: grawisy; PostgreSQL i SQLite: cudzysłowy (dialectQuoter); podwojenie znaku cytuje sam znak wewnątrz nazwy |
| Escape apostrofów | znak ' → '' | standard SQL: apostrof w tekście podwaja się (escapeStr) — dotyczy każdej wartości tekstowej, także JSON-a |
| Transakcja (opcja „Komentarz nagłówka i transakcja”) | START TRANSACTION; … COMMIT; | komentarz z liczbą wierszy i dialektem, BEGIN/START TRANSACTION na początku i COMMIT na końcu |
| Przykład (z silnika) | INSERT INTO `customers` (`id`, `full_name`, `email`, `created_at`, `is_active`) VALUES (1, 'Piotr Woźniak', '[email protected]', '2026-11-09 22:46:33', 0); | pierwsza instrukcja wygenerowana dla bieżącego formularza (wiersz 1, bez nagłówka) |
Kolumny podajesz w formacie nazwa:typ (albo nazwa|typ), po jednej w wierszu — puste linie i wpisy bez dwukropka są pomijane, typ jest normalizowany do małych liter.
| Typ kolumny | Przykładowa wartość | Skąd się bierze |
|---|---|---|
| int | 3 | kolejny numer wiersza |
| uuid | '775ede93-03f3-4c2b-a088-6694cb05a873' | losowy UUID v4 (random_bytes) |
| '[email protected]' | [email protected] / example.org / demo.test / mail.test | |
| full_name | 'Tomasz Szymański' | imiona i nazwiska z pul silnika |
| varchar(24) | 'Las miasto książka herba' | polskie słowa, obcięte do długości; kolumny nazwane jak imię, nazwisko, e-mail lub miasto dostają pasujące dane |
| text | 'Las miasto książka herbata słońce rzeka' | to samo źródło słów, bez limitu długości |
| date | '2026-11-06' | data wstecz o (numer wiersza % 365) dni |
| datetime | '2026-11-09 22:45:19' | czas wstecz o (numer wiersza × 37 s % 20 000 s) |
| boolean | 0 | naprzemiennie 0/1 (parzystość wiersza) |
| decimal | 3.25 | reszta z dzielenia przez 97 plus 0,25 |
| json | '{"id":3,"tag":"demo","active":false}' | poprawny JSON {id, tag, active} w apostrofach |
| enum(basic,pro,team) | 'basic' | losowa opcja z listy w nawiasie |
Typy uuid i enum(…) są losowe (random_bytes / array_rand), więc każdy przebieg daje inne wartości — to celowe, dane testowe mają się różnić między wierszami.
Warto wiedzieć — dane testowe w SQL
Wiele INSERT-ów czy jedno VALUES?
To narzędzie generuje osobną instrukcję dla każdego wiersza — łatwiej wyłuskać problematyczny rekord z logu błędu. Przy dużych wolumenach szybsze bywa wielowierszowe VALUES (…),(…) albo COPY/LOAD DATA; transakcja z opcji „Header” i tak spina całość w jedną atomową jednostkę.
Escape apostrofów
Podwajanie apostrofu (' → '') to standard SQL wspólny dla MySQL, PostgreSQL i SQLite. To wystarcza dla danych testowych, ale prawdziwe aplikacje powinny używać parametryzowanych zapytań / prepared statements — składanie SQL z danych wejściowych to prosta droga do SQL injection.
Różnice dialektów
MySQL cytuje identyfikatory grawisami (`), PostgreSQL i SQLite cudzysłowami ("); transakcję otwiera START TRANSACTION albo BEGIN. Ten sam plik SQL nie zawsze przejdzie w drugiej bazie — wybierz dialekt zgodny z celem przed wygenerowaniem.
Fałszywe, nie prawdziwe dane
Silnik produkuje dane fikcyjne ([email protected], słowa fonetyczne) — nie wrzucaj do seedów ani backupów testowych prawdziwych e-maili czy numerów PESEL. Do wymagających realności zbiorów użyj bibliotek typu Faker, a przed udostępnieniem zrzutu i tak zanonimizuj kolumny wrażliwe.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćPodaj dalej
Komuś też się przyda?
Wyślij znajomemu link. Otworzy narzędzie od razu, bez konta i bez opłat.
Generator instrukcji SQL INSERT – bulk insert z CSV i formularza
Ręczne pisanie kwerend INSERT dla wielu rekordów jest żmudne i podatne na błędy. Generator automatycznie tworzy poprawne instrukcje INSERT INTO z danych wklejonych z arkusza kalkulacyjnego, CSV lub formularza, z obsługą różnych dialektów SQL.
Składnia SQL INSERT
INSERT INTO tabela (kol1, kol2) VALUES (val1, val2). Bulk insert: INSERT INTO tabela (kol1, kol2) VALUES (v1,v2),(v3,v4),(v5,v6). MySQL: do 65535 wierszy naraz. PostgreSQL: bez limitu (praktycznie). SQLite: INSERT OR REPLACE INTO (upsert). INSERT INTO ... SELECT ...: kopiuj z innej tabeli. INSERT IGNORE (MySQL): pomiń błędy duplikatów.
Escaping wartości w SQL
Stringi: otocz apostrofami. Apostrofy w wartości: podwój: O'Connor → 'O''Connor'. Parametryzowane zapytania: bezpieczniejsze (?, $1, :name). NULL: bez apostrofów. Liczby: bez apostrofów. Daty: zależy od bazy. MySQL: '2024-01-15'. PostgreSQL: '2024-01-15'::date. Uwaga: SQL injection! Nigdy nie wklejaj nieoczyszczonych danych użytkownika do SQL.
Bulk insert – wydajność
Bulk insert znacznie szybszy niż pojedyncze INSERT w pętli. MySQL: INSERT INTO t VALUES (1,2),(3,4),(5,6) = jedna transakcja. Transakcje: BEGIN; INSERT; INSERT; COMMIT; – szybsze niż autocommit. Wyłącz indeksy przed bulk: ALTER TABLE t DISABLE KEYS; INSERT...; ENABLE KEYS; (MySQL). PostgreSQL: COPY jest najszybszy dla dużych danych. SQLite: journal_mode=WAL + jedna transakcja.
Dialekty SQL – różnice INSERT
MySQL: INSERT IGNORE (pomiń błędy), INSERT ... ON DUPLICATE KEY UPDATE (upsert). PostgreSQL: INSERT ... ON CONFLICT DO NOTHING/UPDATE (upsert). SQLite: INSERT OR REPLACE / INSERT OR IGNORE. SQL Server: MERGE INTO (upsert). Oracle: MERGE INTO. Standard SQL: brak wbudowanego upsert (był od SQL:2003 jako MERGE). Sprawdź dokumentację swojej bazy.
Najczęstsze pytania
Jak wygenerować INSERT z arkusza Excel/Google Sheets?
Metoda 1: Formuła concatenate: ="INSERT INTO users (name, email) VALUES ('",A2,"','",B2,"');" Metoda 2: Kopiuj → CSV → wklej do generatora online. Metoda 3: Python pandas: df.to_sql("users", engine) lub ręcznie generuj INSERT. Metoda 4: DBeaver/DataGrip: import CSV bezpośrednio do tabeli. Generator online: wklej dane tabelaryczne, wybierz kolumny, generuj.
Jak bezpiecznie wstawiać dane do SQL (SQL injection)?
Nigdy: $sql = "INSERT INTO users (name) VALUES ('" . $userInput . "')". Zawsze: prepared statements (PDO PHP: $stmt->bindParam(), Java PreparedStatement, Python cursor.execute("%s")). ORM: Eloquent, SQLAlchemy, Django ORM automatycznie parametryzują. Walidacja: sprawdź typ danych przed wstawieniem. Uprawnienia: użytkownik bazy tylko INSERT, nie DROP/ALTER.
Jak sprawdzić ile rekordów INSERT wstawiło?
MySQL: SELECT ROW_COUNT() po INSERT. PHP PDO: $pdo->lastInsertId() (ostatnie ID). $stmt->rowCount() (liczba wstawionych). PostgreSQL: INSERT INTO ... RETURNING id (zwraca wstawione rekordy). JDBC Java: getUpdateCount(). Python: cursor.rowcount. Transakcja: COMMIT zwraca liczbę zmienionych wierszy w niektórych klientach.
Jaka jest różnica między INSERT a UPSERT?
INSERT: wstaw nowy rekord. Błąd jeśli klucz istnieje (duplicate key). UPSERT (insert or update): jeśli istnieje → aktualizuj, jeśli nie → wstaw. MySQL: INSERT INTO t VALUES (...) ON DUPLICATE KEY UPDATE col=VALUES(col). PostgreSQL: INSERT INTO t VALUES (...) ON CONFLICT (id) DO UPDATE SET col=EXCLUDED.col. Zastosowanie: synchronizacja danych, idempotentne operacje.
Jak importować duże pliki CSV do bazy SQL?
MySQL: LOAD DATA INFILE 'plik.csv' INTO TABLE t FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'. PostgreSQL: COPY t FROM 'plik.csv' CSV HEADER. SQLite: .import plik.csv tabela (w sqlite3 CLI). Szybkość: LOAD DATA/COPY znacznie szybsze niż INSERT row by row. PHP: PDO + fgetcsv() + bulk INSERT (1000 rows/batch).
Powiązane narzedzia: kwerenda SQL SELECT generator, formatter SQL i tester zapytań SQL.