Rozdział 6: Insert

Dotychczas wszystkie tabele i bazy danych jakie stworzyliśmy są po prostu puste, nie posiadają żadnych wierszy. Można to zmienić w sposób zadziwiająco prosty 🙂

Wpis nie będzie wyjątkowo krótki.

Przejdźmy zatem do konkretów, w celu zapisania danych korzystamy z zapytania zgodnego z poniższym wzorem:

INSERT INTO {nazwa_tabeli} VALUE ({wartosc_1}, {wartosc_2});

W miejscu „nazwa_tabeli” oczywiście powinniśmy wkleić realną nazwę tabeli do której chcemy zapisać nowe dane. Następnie wewnątrz nawiasów zapisujemy nasze dane oddzielając je przecinkami. Poniżej wklejam przykładowe zapytanie:

INSERT INTO `users` VALUE ('Kris', 'Walenty', 21);

Czy powyższy zapis jest czytelny? Która wartość zostanie zapisana w której kolumnie?
To największy minus powyższego zapisu, nie wiemy czym jest wartość ‚21‚ czy to ID czy wiek? MySQL zapisze powyższe wartości w kolejności zgodnej z kolejnością kolumn.

Lekarstwem na powyższy zapis, jest po prostu zmienić go na przedstawiony poniżej:

INSERT INTO {table_name} ({column_1}, {column_2}) VALUES ({value_1}, {value_2});

Oraz przykład:

INSERT INTO `users` ('name', 'surname', 'years') VALUES ('Kris', 'Walenty' 21);

W przypadku drugim, nie musimy dbać o kolejność zgodną z tą z bazy danych. Sami podajemy nazwy kolumn i przypisane do nich wartości.

Oczywiście, jeśli nie podamy kolumn, a w bazie mamy wartość domyślną, zostanie ona wykorzystana do zapisu danych, tak samo jak dla kolumny „id” gdzie mamy zapewne autoinkrementacja.

Dodawanie nowych wartości a klucze obce

Jeśli pamiętasz jeszcze klucze obce o których pisałem tutaj:
https://ifcode.pl/kurs-mysql/rozdzial-5-relacje-pomiedzy-tabelami/

zapewne wiesz, że baza danych strzeże prawidłowych wartości w zadeklarowanych przez nas kolumnach.

Z wpisu powyższego „Relacje pomiędzy tabelami” weźmy tabelkę „Company” i postarajmy się wykonać na niej takie zapytanie:

INSERT INTO `company` ('id_user', 'name') VALUES (99, 'Walenty');

Zapytanie się nie uda, otrzymamy błąd mniej więcej w podobnym kontekście:

Cannot add or update a child row: a foreign key constraint fails

Baza pilnuje od momentu powstania relacji, aby wartość „id_user” zgadzała się z wartością „id” z kolumny „user

Jeśli w momencie tworzenia tabeli „create table” lub po jej modyfikacji „alter table” ustawiliśmy dla kolumny „id_user” atrybut „not null” baza będzie pilnowała również tego, aby w tej tabelce na pewno znalazła się wartość „int„.