Wprowadzanie danych do bazy (INSERT, import z pliku)

Ręczne rekordy, import CSV/SQL, automatyzacja — INF.03

Teoria Ręczne i automatyczne wprowadzanie danych

  • INSERT – najprostszy sposób ręcznego wstawienia rekordu (pojedynczego lub wielu naraz).
  • Dane można wprowadzać przez konsolę SQL, phpMyAdmin, narzędzia GUI lub skrypty.
  • Import z pliku CSV – szybkie ładowanie wielu rekordów (np. z Excela) przy użyciu LOAD DATA lub kreatora importu.
  • Import z pliku .sql – wykonanie gotowego skryptu z CREATE/INSERT (backup, gotowe przykładowe dane).
  • Przed importem warto sprawdzić zgodność kolejności kolumn i separatorów z definicją tabeli.

W INF.03 ważne jest, aby umieć zarówno dodać pojedynczy rekord, jak i szybko załadować setki wpisów z pliku.

Ćwiczenie 1 Ręczne INSERT – dodawanie rekordów

Zadanie: Dodaj 3 uczniów do tabeli uczniowie jednym poleceniem INSERT.
  • Wstaw trzy wiersze w jednym INSERT (wiele list VALUES).
  • Upewnij się, że kolumny zgadzają się z definicją tabeli.
INSERT INTO uczniowie (imie, nazwisko, klasa_id) VALUES
('Adam', 'Nowak', 1),
('Ewa', 'Kowalska', 1),
('Tomasz', 'Borek', 2);

Ćwiczenie 2 Import danych z pliku CSV

Zadanie: Przygotuj plik uczniowie.csv z danymi uczniów i zaimportuj go do tabeli uczniowie.
  • Każda linia w pliku to jeden rekord.
  • Pola oddzielone przecinkami lub średnikami.
  • Brak nagłówka lub odpowiednia opcja w narzędziu importu.
# Plik uczniowie.csv (bez nagłówka):
Adam,Nowak,1
Ewa,Kowalska,1
Tomasz,Borek,2

# Import przez phpMyAdmin:
# 1. Wybierz bazę i tabelę uczniowie → zakładka "Import".
# 2. Wskaż plik uczniowie.csv.
# 3. Ustaw format: CSV, separator pól: przecinek (,), separator linii: \n.
# 4. W razie potrzeby zaznacz pomijanie pierwszej linii (gdy jest nagłówek).
# 5. Kliknij "Importuj".

# Import przez konsolę MySQL:
LOAD DATA INFILE '/sciezka/uczniowie.csv'
INTO TABLE uczniowie
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(imie, nazwisko, klasa_id);

Ćwiczenie 3 Import sekwencji INSERT z pliku .sql

Zadanie: Utwórz plik przyklad_bazy.sql z definicją kilku klas i uczniów, a następnie zaimportuj go do bazy szkola.
  • Plik .sql może zawierać CREATE TABLE i INSERT.
  • Import polega na wykonaniu pliku przez serwer SQL.
-- Plik przyklad_bazy.sql:
INSERT INTO klasy (nazwa) VALUES ('1A'), ('2A');

INSERT INTO uczniowie (imie, nazwisko, klasa_id) VALUES
('Jan', 'Kowal', 1),
('Agnieszka', 'Lis', 1),
('Dawid', 'Mik', 2);

-- Import z konsoli:
mysql -u root -p szkola < przyklad_bazy.sql

Ćwiczenie 4 Automatyzacja: szybki załadunek 1000 rekordów

Zadanie: Wygeneruj plik CSV z 1000 rekordów (np. w Pythonie lub Excelu) i załaduj go do tabeli uczniowie.
  • Przy generowaniu danych zachowaj spójność typów (np. numery klas).
  • Użyj LOAD DATA lub kreatora importu w phpMyAdmin.
  • Po imporcie policz liczbę rekordów (SELECT COUNT(*)).
# Przykładowy skrypt Python generujący uczniowie1000.csv
import csv
with open('uczniowie1000.csv', 'w', newline='', encoding='utf-8') as f:
    w = csv.writer(f)
    for i in range(1000):
        imie = f"Imie{i+1}"
        nazwisko = f"Nazwisko{i+1}"
        klasa_id = (i % 4) + 1  # klasy 1..4
        w.writerow([imie, nazwisko, klasa_id])

# Import do MySQL jak w ćwiczeniu 2
LOAD DATA INFILE '/sciezka/uczniowie1000.csv'
INTO TABLE uczniowie
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(imie, nazwisko, klasa_id);

-- Sprawdzenie:
SELECT COUNT(*) FROM uczniowie;

Ćwiczenie 5 Import z nagłówkiem i różną kolejnością kolumn

Zadanie: Masz plik klienci.csv z nagłówkiem: email;imie;nazwisko. Tabela w bazie ma kolumny: id, imie, nazwisko, email. Pokaż, jak skonfigurować import, aby dane trafiły w dobre kolumny.
  • Ustaw separator na średnik (;).
  • Pomiń pierwszą linię (nagłówek).
  • W LOAD DATA wskaż kolejność kolumn zgodnie z plikiem.
# Plik klienci.csv:
email;imie;nazwisko
jan.nowak@example.com;Jan;Nowak
anna.kowalska@example.com;Anna;Kowalska

# Import przez LOAD DATA:
LOAD DATA INFILE '/sciezka/klienci.csv'
INTO TABLE klienci
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(email, imie, nazwisko);

Zadanie INF.03 „Dziennik ocen” – zasilenie bazy z plików

Opis: Masz bazę szkola z tabelami: uczniowie(id, imie, nazwisko, klasa_id), klasy(id, nazwa), oceny(id, uczen_id, przedmiot, ocena). Do dyspozycji są 3 pliki:
  • klasy.csv – nazwy klas,
  • uczniowie.csv – imię, nazwisko, nazwa klasy,
  • oceny.sql – INSERT-y z ocenami.
  1. Zaimportuj klasy.csv do tabeli klasy.
  2. Zaimportuj uczniowie.csv do tymczasowej tabeli i przypisz klasa_id na podstawie nazwy klasy.
  3. Wykonaj skrypt oceny.sql, aby uzupełnić oceny.
-- 1. Import klas (plik klasy.csv: tylko kolumna nazwa)
LOAD DATA INFILE '/sciezka/klasy.csv'
INTO TABLE klasy
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(nazwa);

-- 2. Tymczasowa tabela na uczniów z nazwą klasy
CREATE TABLE tmp_uczniowie (
  imie VARCHAR(30),
  nazwisko VARCHAR(40),
  nazwa_klasy VARCHAR(12)
);

LOAD DATA INFILE '/sciezka/uczniowie.csv'
INTO TABLE tmp_uczniowie
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(imie, nazwisko, nazwa_klasy);

-- Przeniesienie danych do właściwej tabeli z wyznaczeniem klasa_id:
INSERT INTO uczniowie (imie, nazwisko, klasa_id)
SELECT t.imie,
       t.nazwisko,
       k.id
FROM tmp_uczniowie t
JOIN klasy k ON t.nazwa_klasy = k.nazwa;

DROP TABLE tmp_uczniowie;

-- 3. Import ocen z pliku oceny.sql:
mysql -u root -p szkola < oceny.sql

Quiz Sprawdź wiedzę o importach!

  1. Jak dodać jeden rekord do bazy przy użyciu SQL?
  2. Jaka jest zaleta importu CSV w porównaniu z ręcznym wprowadzaniem danych?
  3. Czym różni się plik .sql od .csv w kontekście bazy danych?
  4. Jak szybko załadować duże ilości danych do tabeli w MySQL?
  5. Dlaczego ważne jest dopasowanie kolejności kolumn pliku do tabeli?
  • Za pomocą polecenia INSERT INTO tabela (kolumny) VALUES (wartości);.
  • Pozwala szybko wczytać setki lub tysiące rekordów bez ręcznego wpisywania każdego z nich.
  • Plik .sql zawiera polecenia (np. CREATE, INSERT), a .csv przechowuje same dane w formacie tabelarycznym.
  • Używając polecenia LOAD DATA INFILE lub kreatora importu w narzędziach takich jak phpMyAdmin.
  • Bo błędne dopasowanie spowoduje, że dane trafią do niewłaściwych kolumn lub import się nie powiedzie.

Checklista Sprawdź umiejętności

  • Wprowadzam ręcznie dane do tabel za pomocą INSERT (pojedyncze i wiele wierszy naraz).
  • Importuję dane z plików CSV, poprawnie ustawiając separatory i nagłówki.
  • Wykonuję skrypty .sql, aby odtworzyć lub zasilić bazę danych.
  • Potrafię zautomatyzować załadunek dużych plików oraz zweryfikować wynik importu.
Materiały: INF.03 — Wprowadzanie i import danych · Autor: Tomasz Puchała © 2025