POWRÓT NA STRONĘ SZKOŁY

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.

Dodawanie rekordu do tabeli - sposób 1
Rysunek 4_1_0_1. Dodawanie rekordu do tabeli - sposób 1

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.

Dodawanie rekordu do tabeli - sposób 2
Rysunek 4_1_0_2. Dodawanie rekordu do tabeli - sposób 2

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.

Dodawanie rekordu do tabeli - sposób 3
Rysunek 4_1_0_3. Dodawanie rekordu do tabeli - sposób 3

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

Tabela klienci po wstawieniu trzech rekordów
Rysunek 4_1_0_4. Tabela 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');

Dodawanie trzech rekordów do tabeli
Rysunek 4_1_0_5. Dodawanie trzech rekordów do tabeli

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

Tabela klienci po wstawieniu następnych trzech rekordów
Rysunek 4_1_0_6. Tabela 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:

  1. wartości pola ilosc (3 kolumna) tabeli ksiazki_zamowione dla klucza obcego zamowienie_id (kolumna 1) zgodnego z kluczem głównym zamowienie_id tabeli zamowienia;
  2. wartości pola cena (4 kolumna) tabeli ksiazki, przy czym odpowiednią cenę znajdziemy odszukując w tej tabeli isbn wchodzący w skład klucza głównego tabeli ksiazki_zamowione, wskazanego w poprzednim punkcie.

Tak więc w tabeli zamowienia, w polu wartosc (3 kolumna) wpisujemy następujące liczby:

  1. 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 tabeli ksiazki, odpowiednia cena wynosi 99.90. Tak więc mamy 2⋅99.90=199.80
  2. 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
  3. W trzecim zamówieniu, zamówiono 1 książkę '83-246-0375-1' w cenie 22.10
  4. W czwartym zamówieniu, zamówiono 1 książkę '83-7197-034-X' w cenie 120.34
  5. W piątym zamówieniu, zamówiono 2 książki '83-7197-709-3': 2⋅90.20 = 180.40
  6. 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
  7. W siódmym zamówieniu, zamówiono 3 książki '83-246-0375-1': 3⋅22.10 = 66.30
  8. W ósmym zamówieniu, zamówiono 3 książki '83-7361-391-1': 3⋅26.60 = 79.80
  9. W dziewiątym zamówieniu, zamówiono 1 książkę '87-7361-784-1' w cenie 99.90
  10. 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.

Tabela klienci z danymi
Rysunek 4_1_0_8. Tabela klienci z danymi
Tabela zamowienia z danymi
Rysunek 4_1_0_9. Tabela zamowienia z danymi
Tabela ksiazki z danymi
Rysunek 4_1_0_10. Tabela ksiazki z danymi
Tabela ksiazki_zamowione z danymi
Rysunek 4_1_0_11. Tabela ksiazki_zamowione z danymi
Tabela recenzje_ksiazek z danymi
Rysunek 4_1_0_12. Tabela recenzje_ksiazek z danymi