Gwar Grodziska, Prokrust Zombiakov, 21.08.2015 r. o 23:54
[TI][SQL] 2. Wstawianie danych (INSERT)

logo_ti.png

Podczas ostatniej lekcji utworzyliśmy tabelę. Czas aby tabela spotkała swoje przeznaczenie a więc zaczęła przechowywać dane (rekordy, wiersze). Dziesiątki, setki i tysiące wierszy. Czyli ... dziesiątki, setki i tysiące grobów naszego hipotetycznego wirtualnego cmentarza.

Nie będzie to zbyt długa lekcja gdyż polecenie służące do dodawania danych jest proste i nie obfituje w nadmiar ważnych opcji.

Zaczynamy komendę od słów INSERT INTO (czyli "wstaw do"). Następnie podajemy nazwę tabeli do którek chcemy wprowadzić dane...

INSERT INTO GROBY

Dalej w nawiasach wymieniamy kolumny do których wprowadzamy dane. Nie muszą być to wszystkie kolumny zdefiniowane podczas jej tworzenia. Kolumny nie uwzględnione w poleceniu INSERT pozostaną puste (dlaczego nie zawsze jest to prawda dowiecie się w przyszłych lekcjach).

INSERT INTO GROBY (numer_grobu, typ, email, id_sarmacja, data_oplacone)

Po liście kolumn i nawiasie pojawia się słowo VALUES które jest wstępem do listy wartości jakie chcemy wprowadzić do wcześniej wymienionych pól...

INSERT INTO GROBY (numer_grobu, typ, email, id_sarmacja, data_oplacone) VALUES

Dodajemy kolejne nawiasy i pomiędzy nimi umieszczamy oddzielone przecinkami wartości w takiej samej kolejności w jakiej wcześniej podawaliśmy kolumny. A więc do kolumny "numer_grobu" trafi "1", do kolumny "email" trafi wartość "zombiakov@wp.pl" itd.

INSERT INTO GROBY (numer_grobu, typ, email, id_sarmacji, data_oplacone) VALUES (1, 'G', 'zombiakov@wp.pl', 'A1217', '2016-01-01')

Na końcu dodamy jeszcze średnik aby wyraźnie zaznaczyć koniec danego polecenia.

INSERT INTO GROBY (numer_grobu, typ, email, id_sarmacja, data_oplacone) VALUES (1, 'G', 'zombiakov@wp.pl', 'A1217', '2016-01-01');

Zwróć uwagę, że wartości tekstowe oraz data otoczone są apostrofami zaś wartość liczbowa (pole typu INTEGER) nie.
Całe polecenie możemy przekleić do okna phpMyAdmin (tak jak przy tworzeniu tabeli w poprzedniej lekcji)

1.png

i wykonać...

2.png

Jeżeli teraz wykonamy zapytanie przedstawione w poprzedniej lekcji:

SELECT * FROM GROBY;

dostaniemy sensowny wynik:

3.png


Jeżeli mamy pewność, że wprowadzimy wartość do wszystkich kolumn i w dobrej kolejności to można pominąć listę kolumn.

INSERT INTO GROBY VALUES (2, 'Z', '2020-08-09', 'rysiek@zkla.nu', 'T8921', 10, 1, 15, '2011-09-02');

Po wykonaniu tego polecenia INSERT oraz wykonaniu zapytania "SELECT * FROM GROBY;" wyświetlą się nam już dwa wiersze, czyli dwa groby.

4.png

Pominięcie listy kolumn może być wygodne jeżeli pisane polecenie wykonamy raz i tyle. Jeżeli jednak ma być to część kodu która będzie wykonywana regularnie i może ewoluować (np. poprzez dodawanie, odejmowanie kolumn) o wiele czytelniejsze będzie zachowanie jawnej listy kolumn. W innym przypadku po prostu łątwo się zgubić.

Ciekawym rozwiązaniem dostępnym w wielu systemach RDBMS (typach baz) jest masowy INSERT na podstawie wyniku zapytania. Jeżeli wykonasz poniższe polecenie

INSERT INTO GROBY
(SELECT * FROM GROBY);


w tabeli pojawią się dodatkowe dwa wiersze identyczne jak wcześniej istniejące.

5.png

Każde kolejne wywołanie podwoi liczbę wierszy. Ważne jest tutaj aby lista kolumn tabeli docelowej (wskazanej przez INSERT INTO) zgadzała się z listą kolumn zwracanych przez zapytanie. W naszym przypadku nie było to trudne gdyż zarówno celem jak i źródłem była ta sama tabela. W praktyce tak raczej nie będzie ale wskazanie właściwych kolumn nie jest niczym trudnym gdy już zna się podstawy.

O ile znajomość polecenia INSERT to niepodważalna podstawa wiedzy teoretycznej to jednak phpMyAdmin pozwala dodawać dane (jak i również wykonywać wiele innych czynności) bez znajomości języka SQL. Jeżeli na liście po lewej wybierzemy naszą tabelę GROBY a następnie wybierzemy zakładkę "Dodaj"

6.png

otrzymamy do dyspozycji klasyczny formularz pozwalający na ustawienie wartości każdej z kolumn i wykonanie komendy INSERT nawet o niej nie myśląc.

7.png

W kolejnym materiale przyjrzymy się dokładniej tzw. zapytaniom (query) czyli np.SELECT * FROM GROBY;
Dotacje
1 000,00 lt
Dotychczasowi donatorzy: Arsacjusz Arped, Zbyszko Gustolúpulo.
Serduszka
4 025,00 lt
Ten artykuł lubią: Arsacjusz Arped, Krzysztof St. M. Kwazi, Zbyszko Gustolúpulo, Adunaphel Kovall, Siergiusz Asketil, Andrzej Fryderyk, Zoara Schlesinger-Asketil.
Komentarze
Mateusz Wilhelm
tiaaa... pamietam jak kiedy wydawało sie to skomplikowane... z tym że nie jestem pewien czy pola powierzchnia, x oraz y potrzebują aż 11 cyfr,
Odpowiedz Permalink
Prokrust Zombiakov
Pewnie nie. Ale jeżeli zaczniemy się zastanawiać nad skalą i precyzją liczb to idea kursu umrze :-)
Odpowiedz Permalink
Defloriusz Dyman Wander
INSERT INTO GROBY
SELECT FROM GROBY <3

Czy piszecie pierwszą w historii fałświata aplikację nekrofilską? <3
Odpowiedz Permalink

Musisz się zalogować, by móc dodawać komentarze.