Zapisywanie danych w bazie
Polecenie języka SQL, służące do wstawiania wiersza danych do tabeli, to INSERT
. Składnia tego polecenia jest następująca:
INSERT INTO nazwa_tabeli [(kolumna1, kolumna2, kolumna3...)] VALUES(wartosc1, wartosc2, wartosc3...);
Jak widzimy nazwy kolumn - kolumna1
, kolumna2
, kolumna3
, ... są opcjonalne. Podajemy je wtedy, gdy chcemy wprowadzić dane tylko do niektórych kolumn, lub wygodniej jest wprowadzać dane w innej kolejności, jak kolejność kolumn w tabeli.
Ćwiczenie 4_1_0_1. Wstawianie pojedynczych wierszy do tabeli
Napierw przypomnijmy sobie jak tworzyliśmy tabele. Tworząc tabelę klienci
, stosowaliśmy następujący kod SQL:
CREATE TABLE klienci
(
klient_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
nazwisko CHAR(50) NOT NULL,
adres CHAR(100) NOT NULL,
miejscowosc CHAR(30) NOT NULL
);
Musimy zapewnić poprawne wyświetlanie polskich znaków. Dla przećwiczenia zdobytych do tej pory umiejętności i uzyskania wyświetlania polskich znaków wykonaj co następuje:
-
wykorzystujac narzędzia phpMyAdmin usuń bazę
ksiegarnia_internetowa
; -
utwórz bazę
ksiegarnia_internetowa
stosując plecenie SQL:
CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- Utwórz tabele bazy identycznie jak to robiłeś na wcześniejszych zajęciach;
Teraz zajmmiemy się wstawianiem pojedynczych rekordów do tabeli klienci
. W tym celu wykonaj następujące polecenie SQL:
INSERT INTO klienci VALUES(NULL, 'Anna Kowalska', 'Piłsudskiego 24/5', 'Krasnystaw');
Zwróć uwagę, że w kolumnie klient_id
, wpisaliśmy NULL
. Tworząc tabelę wpisaliśmy dla tej kolumny NOT NULL
, a teraz wpisujemy wartość NULL
? Otóż możemy tak zrobić, ponieważ pole to zostało zadeklarowane jako AUTO_INCREMENT
, więc MySQL wygeneruje automatycznie unikatową wartość klucza głównego. Pola nazwisko
, adres
i miejscowość
, to łańcuchy znaków - dlatego odpowiednie teksty zostały wpisane w apostrofach.

Wykonaj następne polecenie SQL:
INSERT INTO klienci (adres, nazwisko, miejscowosc) VALUES('Lubelska 8/12', 'Zdzisław Bęben', 'Warszawa');
Zwróć uwagę, że tym razem zmieniliśmy kolejność wypełnianych pól.

Wykonaj następne polecenie SQL:
INSERT INTO klienci SET adres='Lwowska 10/22', nazwisko='Mirosław Mróz', miejscowosc='Lublin';
Zwróć uwagę, że tym razem zastosowaliśmy inny sposób wypełniania pól.

Wstawiliśmy trzy rekordy i tabela klienci
, wygląda teraz następująco:

klienci
po wstawieniu trzech rekordówĆwiczenie 4_1_0_2. Wstawianie kilku wierszy do tabeli
W tym ćwiczeniu powiększymy tabelę klienci
o kolejne 3 rekordy stosując tym razem jedno plecenie INSERT
, które będzie wyglądało następująco:
INSERT INTO klienci VALUES
(NULL, 'Jan Prędki', 'Kwiatowa 8', 'Zabrze'),
(NULL, 'Józef Koń', 'Zatybrze 23', 'Rzym'),
(NULL, 'Ferdynand Kiepski', 'Piwna 13/13', 'Wrocław');

Wstawiliśmy trzy rekordy i tabela klienci
, wygląda teraz następująco:

klienci
po wstawieniu następnych trzech rekordówĆwiczenie 4_1_0_3. Wypełnienie danymi tabel bazy ksiegarnia_internetowa
Wykorzystując umiejętności zdobyte podczas wykonywania poprzednich ćwiczeń, wypełnij danymi wszystkie tabele bazy ksiegarnia_internetowa
. Każda z tabel powinna posiadać minimum 10 wierszy. Po wykonaniu zadania, wyeksportuj tabele bazy ksiegarnia_internetowa
na nośnik zewnętrzny, aby nie utracić danych.
W tabeli klienci
mamy sześć rekordów, musimy więc jeszcze dodać cztery, natomiast w innych tabelach po minimum 10 rekordów:
INSERT INTO klienci VALUES
(NULL, 'Jan Mądry', 'Różana 10', 'Zaklików'),
(NULL, 'Józef Nauczyciel', 'Mełgiewska 22', 'Żdżanne'),
(NULL, 'Ferdynand Wspaniały', 'Browarna 18/7', 'Wrocław'),
(NULL, 'Jan Powolny', 'Akacjowa 12', 'Baraki');
INSERT INTO zamowienia VALUES
(NULL, 5, 199.80, '2014-10-11'),
(NULL, 1, 210.05, '2014-10-12'),
(NULL, 2, 22.10, '2014-10-12'),
(NULL, 5, 120.34, '2014-10-14'),
(NULL, 6, 180.40, '2014-10-19'),
(NULL, 7, 246.90, '2014-10-21'),
(NULL, 8, 66.30, '2014-11-01'),
(NULL, 9, 79.80, '2014-11-10'),
(NULL, 7, 99.90, '2014-11-10'),
(NULL, 10, 90.20, '2014-11-15');
INSERT INTO ksiazki VALUES
('87-7361-784-1', 'Luke Welling, Laura Thomson', 'PHP i MySQL. Tworzenie stron WWW.
Vademecum profesjonalisty', 99.90),
('83-7361-391-1', 'Rob Flickenger', '100 sposobów na sieci bezprzewodowe', 25.30),
('83-7311-984-1', 'Dan Verton', 'Pamiętniki hakerów', 36.00),
('978-83-246-3791-1', 'Bartosz Danowski', 'Ćwiczenia praktyczne HTML5', 26.60),
('978-83-246-3887-1', 'Alex MacCaw', 'JavaScript. Aplikacje WWW', 48.25),
('83-86969-49-0', 'Andrzej Marciniak', 'Object Pascal', 110.15),
('83-7197-034-X', 'Kent Reisdorph', 'Delphi 4 dla każdego', 120.34),
('83-246-0375-1', 'Rafał Pawlak', 'Okablowanie strukturalne sieci', 22.10),
('978-83-246-1219-2', 'Piotr Czarny', 'Mandriva Linux', 30.20),
('83-7197-709-3', 'Bruce Eckel', 'Thinking in C++', 90.20);
INSERT INTO ksiazki_zamowione VALUES
(1, '87-7361-784-1', 2),
(2, '87-7361-784-1', 1),
(2, '83-86969-49-0', 1),
(3, '83-246-0375-1', 1),
(4, '83-7197-034-X', 1),
(5, '83-7197-709-3', 2),
(6, '978-83-246-3791-1', 1),
(6, '83-86969-49-0', 2),
(7, '83-246-0375-1', 3),
(8, '83-7361-391-1', 3),
(9, '87-7361-784-1', 1),
(10, '83-7197-709-3', 1);
INSERT INTO recenzje_ksiazek VALUES
('87-7361-784-1','Bardzo profesjonalna książka opisująca jak tworzyć dynamiczne strony WWW,
stosując PHP oraz MySQL'),
('83-86969-49-0', 'Książka zawiera kompendium wiedzy na temat programowania obiektowego
w języku Pascal w środowisku Delphi 5. Przeznaczona jest zarówno dla początkujących programistów,
jak równiez profesjonalistów'),
('83-246-0375-1', 'Ciekawa książka dla interesujących się budową i działaniem sieci');
Musimy zadbać o spójność danych. Wartości wpisywane w tabeli zamowienia
, w polu wartosc
(3 kolumna), muszą wynikać z:
-
wartości pola
ilosc
(3 kolumna) tabeliksiazki_zamowione
dla klucza obcegozamowienie_id
(kolumna 1) zgodnego z kluczem głównymzamowienie_id
tabelizamowienia
; -
wartości pola
cena
(4 kolumna) tabeliksiazki
, przy czym odpowiednią cenę znajdziemy odszukując w tej tabeliisbn
wchodzący w skład klucza głównego tabeliksiazki_zamowione
, wskazanego w poprzednim punkcie.
Tak więc w tabeli zamowienia
, w polu wartosc
(3 kolumna) wpisujemy następujące liczby:
-
W pierwszym zamówieniu wpisujemy 199.80, ponieważ w
ksiazki_zamowione
zamowienie_id=1, odpowiada 2 książkom o numerze isbn='87-7361-784-1'. Znajdujemy, ten numer w tabeliksiazki
, odpowiednia cena wynosi 99.90. Tak więc mamy 2⋅99.90=199.80 - W drugim zamówieniu, zamówiono 1 książkę '87-7361-784-1' i książkę '83-86969-49-0', o cenach odpowiednio 99.90 oraz 110.15. Daje to kwotę 99.90 + 110.15 = 210.05
- W trzecim zamówieniu, zamówiono 1 książkę '83-246-0375-1' w cenie 22.10
- W czwartym zamówieniu, zamówiono 1 książkę '83-7197-034-X' w cenie 120.34
- W piątym zamówieniu, zamówiono 2 książki '83-7197-709-3': 2⋅90.20 = 180.40
- W szóstym zamówieniu, zamówiono 1 książkę '978-83-246-3791-1' w cenie 26.60 oraz 2 książki '83-86969-49-0' w cenie 110.15, co daje 26.60 + 2⋅110.15 = 246.90
- W siódmym zamówieniu, zamówiono 3 książki '83-246-0375-1': 3⋅22.10 = 66.30
- W ósmym zamówieniu, zamówiono 3 książki '83-7361-391-1': 3⋅26.60 = 79.80
- W dziewiątym zamówieniu, zamówiono 1 książkę '87-7361-784-1' w cenie 99.90
- W dziesiątym zamówieniu, zamówiono 1 książkę '83-7197-709-3' w cenie 90.20
Być może, nasuwają się nam wątpliwości co do logiki wypełniania tabel - jak wpisywać wartosc
w tabeli zamowienia
, skoro nie znamy ceny ani liczby zamówionych książek. Jeżeli mamy takie wątpliwości, to popełniamy błąd myślowy - znamy, tylko że te dane znajdują się w innych tabelach powiązanych odpowiednimi relacjami. Jeszcze jedna uwaga jest taka, że w tabeli zamowienia
, automatycznie wpisywane liczby klucza głównego nie muszą zaczynać się od 1. Należy zwrócić uwagę, czy klucz obcy zamowienie_id
tabeli ksiazki_zamowione
jest zgodny kluczem głównym tabeli zamowienia
.

klienci
z danymi
zamowienia
z danymi
ksiazki
z danymi
ksiazki_zamowione
z danymi
recenzje_ksiazek
z danymi