[ Pobierz całość w formacie PDF ]
tabelę Uczniowie. Oczywiście nie wygląda to tak, że przy zmienianiu tematu wykonywane jest polecenie ALTER
TABLE. Technicznie rzecz biorąc: obydwie części kursu - z uproszczoną tabelą Uczniowie i jej wersją
rozszerzoną - pracują faktycznie na różnych chociaż bardzo podobnych bazach danych (jedna baza zawiera
uproszczonÄ…, druga - rozszerzonÄ… wersjÄ™ tabeli Uczniowie).
Strona 40 z 44
INSERT
Polecenie INSERT wstawia do istniejÄ…cej tabeli nowy rekord. W poleceniu podaje siÄ™ nazwÄ™ tabeli, w
nawiasach listę nazw kolumn, którym w nowym rekordzie mają być nadane wartości i po słowie kluczowym
VALUES, też w nawiasach, te wartości, w tej samej kolejności, w jakiej podawano nazwy kolumn (zarówno
nazwy kolumn, jak i ich wartości, rozdziela się przecinkami). Kolumny w nowym rekordzie, którym w zdaniu
INSERT nie nadano wartości, otrzymują wartości domyślne, określone bądz przez opcje DEFAULT w poleceniu
CREATE, za pomocą którego utworzono tabelę, bądz - jeśli tej opcji nie użyto - przez wartości domyślne
MySQL. Oto polecenie wprowadzajÄ…ce do tabeli Klasy rekord nowej pierwszej (Poziom=1) klasy o nazwie '1e' i
profilu ogólnym ('OG'):
INSERT INTO Klasy (Nazwa, Poziom, Profil) VALUES ('1e' 1, 'OG');
Pola klucza podstawowego, gospodarza i komentarza nie sÄ… w poleceniu podane. Klucz podstawowy
(Id) zostanie wstawiony przez RDBMS automatycznie (będzie to następna wartość po wartości klucza użytej
przy wstawianiu poprzedniego rekordu do tabeli). I wstawienie rekordu nowego ucznia:
INSERT INTO Uczniowie (Imię Nazwisko, Miasto, Data_urodzenia, Płeć)
VALUES ('Jan', 'Kamiński', 'Kraków', '1987-02-10', 'M');
Nie wiążemy tu ucznia z klasą. Zakładamy, że uczeń przydzielony zostanie do klasy pózniej (nie
nadaliśmy też wartości polu Telefon).
Jeśli nie poda się nazw pól w tabeli, wartości z VALUES będą wstawiane do pól w rekordzie kolejno,
"jak leci". W takiej sytuacji musielibyśmy podać wartość klucza, w przeciwnym razie nadana by mu została
wartość '1e' (w istocie MySQL zasygnalizowałby błąd).
W jednym poleceniu INSERT można wstawić więcej niż jeden rekord, podając kilka zestawów
wartości, rozdzielonych przecinkami (lista kolumn dla wszystkich wstawianych rekorów jest taka sama).
Przykład: dwa polecenia:
INSERT INTO Uczniowie (Imię, Nazwisko, Płeć) VALUES ('Ewa', 'Pilch', 'K');
INSERT INTO Uczniowie (Imię, Nazwisko, Płeć) VALUES ('Jan', 'Maleszka', 'M');
można zapisać za pomocą jednego:
INSERT INTO Uczniowie (Imię, Nazwisko, Płeć) VALUES ('Ewa', 'Pilch', 'K'),('Jan', 'Maleszka', 'M');
Przenoszenie bazy danych, np. z jednego systemu RDBMS na drugi, polega praktycznie na zapisaniu jej
struktury i zawartości w pliku tekstowym, w postaci sekwencji instrukcji: jednej CREATE TABLE i pewnej
liczby INSERT (argumentami tych ostatnich są pełne zawartości rekordów) i wykonaniu tych instrukcji na innej
platformie (mówimy o takim pliku - skrypt SQL). Jeśli przenoszonych jest 10 tys. rekordów, oznacza to
praktycznie 10 tys. zdań INSERT. Baza danych kursu (tabele Uczniowie i Klasy, a także inne tabele używane w
kursie SQL(2)) była tworzona w systemie Windows, a potem przeniesiona w opisany sposób na serwer z
systemem Linux, gdzie teraz właśnie się znajduje.
Plik eksportowany tabeli Klasy:
Oto fragment pliku zawierającego całą tabelę Klasy (na początku pliku znajduje się, tu pominięte, polecenie
CREATE TABLE tworzÄ…ce tabelÄ™ Klasy):
...
INSERT INTO `klasy` VALUES (2, '1B', 1, 'HM', 202, 'Klasa dobra.');
INSERT INTO `klasy` VALUES (3, '1C', 1, 'MI', 316, 'Klasa przeciętna.');
INSERT INTO `klasy` VALUES (4, '1D', 1, 'OG', 422, 'Klasa przeciętna.');
INSERT INTO `klasy` VALUES (5, '2A', 2, 'OG', 504, 'Klasa dobra.');
INSERT INTO `klasy` VALUES (6, '2B', 2, 'MI', 610, 'Klasa dobra.');
INSERT INTO `klasy` VALUES (7, '2C', 2, 'OG', 720, 'Klasa trudna.');
...
Nie ma tu nazw kolumn - w VALUES jest komplet wartości, które są wstawiane do rekordu, łącznie z kluczami
podstawowymi. Nie można oczywiście zostawić ich generowania systemowi, bo klucze te mogły być już użyte w
połączeniach z innymi tabelami.
Wyżej wstawiliśmy za pomocą INSERT rekord do tabeli Klasy, a system sam określił wartość klucza
podstawowego. Załóżmy, że klucza nowej klasy musimy użyć w rekordach uczniów, którzy będą do niej
przypisani. Oczywiście moglibyśmy zajrzeć do wstawionego rekordu klasy, sprawdzić jaka wartość została
nadana kluczowi i jej użyć. Więcej, moglibyśmy sami wybrać sobie dla nowej klasy dowolny klucz, np. 4567,
wiedząc, że jest unikalny, podać go explicite w poleceniu INSERT i nadawać go potem uczniom, którzy mają
należeć do tej klasy. Ale takie "rękodzieło" może być używane przy prostych i co ważniejsze, małych tabelach,
zawierających niewiele rekordów, w dodatku rzadko modyfikowanych, takich jak tabele naszego kursu właśnie.
W dużych portalach czy systemach komercyjnych, gdzie na sekundę realizowane są dziesiątki jeśli nie setki
operacji wstawiania rekordu, obsługa kluczy podstawowych nowych rekordów musi być zautomatyzowana. Jak
zatem dotrzeć do klucza wstawionego automatycznie do rekordu i wstawić go do nowego rekordu jako klucz
obcy w innej połączonej tabeli, też automatycznie?
Strona 41 z 44
UPDATE
Polecenie UPDATE służy do modyfikowania zawartości istniejących rekordów. W UPDATE podaje się
nazwę tabeli, której rekordy mają być modyfikowane oraz, w opcjach
·ð SET - które pola w modyfikowanym rekordzie jakie majÄ… mieć nowe wartoÅ›ci, i w
·ð WHERE - które rekordy majÄ… być modyfikowane (kryterium wyboru takie samo jak w SELECT).
Jeśli nie poda się opcji WHERE, modyfikowane będą wszystkie rekordy w tabeli.
Oto polecenie, które wszystkim klasom z poziomu 1 nadaje poziom 2 (np. na koniec roku szkolnego):
UPDATE Klasy SET Poziom = 2 WHERE Poziom=1;
I zmiana profilu klasy o nazwie '2D' na profil matematyczno-informatyczny (MI):
UPDATE Klasy SET Profil='MI' WHERE Nazwa='2D';
Reszta rekordów pozostanie bez zmian. Można w jednym poleceniu zmieniać kilka pól. Załóżmy, że
szkoła w następnym roku staje się szkołą o profilu matematyczno-informatycznym. W kolejnym roku szkolnym [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl aikidobyd.xlx.pl
tabelę Uczniowie. Oczywiście nie wygląda to tak, że przy zmienianiu tematu wykonywane jest polecenie ALTER
TABLE. Technicznie rzecz biorąc: obydwie części kursu - z uproszczoną tabelą Uczniowie i jej wersją
rozszerzoną - pracują faktycznie na różnych chociaż bardzo podobnych bazach danych (jedna baza zawiera
uproszczonÄ…, druga - rozszerzonÄ… wersjÄ™ tabeli Uczniowie).
Strona 40 z 44
INSERT
Polecenie INSERT wstawia do istniejÄ…cej tabeli nowy rekord. W poleceniu podaje siÄ™ nazwÄ™ tabeli, w
nawiasach listę nazw kolumn, którym w nowym rekordzie mają być nadane wartości i po słowie kluczowym
VALUES, też w nawiasach, te wartości, w tej samej kolejności, w jakiej podawano nazwy kolumn (zarówno
nazwy kolumn, jak i ich wartości, rozdziela się przecinkami). Kolumny w nowym rekordzie, którym w zdaniu
INSERT nie nadano wartości, otrzymują wartości domyślne, określone bądz przez opcje DEFAULT w poleceniu
CREATE, za pomocą którego utworzono tabelę, bądz - jeśli tej opcji nie użyto - przez wartości domyślne
MySQL. Oto polecenie wprowadzajÄ…ce do tabeli Klasy rekord nowej pierwszej (Poziom=1) klasy o nazwie '1e' i
profilu ogólnym ('OG'):
INSERT INTO Klasy (Nazwa, Poziom, Profil) VALUES ('1e' 1, 'OG');
Pola klucza podstawowego, gospodarza i komentarza nie sÄ… w poleceniu podane. Klucz podstawowy
(Id) zostanie wstawiony przez RDBMS automatycznie (będzie to następna wartość po wartości klucza użytej
przy wstawianiu poprzedniego rekordu do tabeli). I wstawienie rekordu nowego ucznia:
INSERT INTO Uczniowie (Imię Nazwisko, Miasto, Data_urodzenia, Płeć)
VALUES ('Jan', 'Kamiński', 'Kraków', '1987-02-10', 'M');
Nie wiążemy tu ucznia z klasą. Zakładamy, że uczeń przydzielony zostanie do klasy pózniej (nie
nadaliśmy też wartości polu Telefon).
Jeśli nie poda się nazw pól w tabeli, wartości z VALUES będą wstawiane do pól w rekordzie kolejno,
"jak leci". W takiej sytuacji musielibyśmy podać wartość klucza, w przeciwnym razie nadana by mu została
wartość '1e' (w istocie MySQL zasygnalizowałby błąd).
W jednym poleceniu INSERT można wstawić więcej niż jeden rekord, podając kilka zestawów
wartości, rozdzielonych przecinkami (lista kolumn dla wszystkich wstawianych rekorów jest taka sama).
Przykład: dwa polecenia:
INSERT INTO Uczniowie (Imię, Nazwisko, Płeć) VALUES ('Ewa', 'Pilch', 'K');
INSERT INTO Uczniowie (Imię, Nazwisko, Płeć) VALUES ('Jan', 'Maleszka', 'M');
można zapisać za pomocą jednego:
INSERT INTO Uczniowie (Imię, Nazwisko, Płeć) VALUES ('Ewa', 'Pilch', 'K'),('Jan', 'Maleszka', 'M');
Przenoszenie bazy danych, np. z jednego systemu RDBMS na drugi, polega praktycznie na zapisaniu jej
struktury i zawartości w pliku tekstowym, w postaci sekwencji instrukcji: jednej CREATE TABLE i pewnej
liczby INSERT (argumentami tych ostatnich są pełne zawartości rekordów) i wykonaniu tych instrukcji na innej
platformie (mówimy o takim pliku - skrypt SQL). Jeśli przenoszonych jest 10 tys. rekordów, oznacza to
praktycznie 10 tys. zdań INSERT. Baza danych kursu (tabele Uczniowie i Klasy, a także inne tabele używane w
kursie SQL(2)) była tworzona w systemie Windows, a potem przeniesiona w opisany sposób na serwer z
systemem Linux, gdzie teraz właśnie się znajduje.
Plik eksportowany tabeli Klasy:
Oto fragment pliku zawierającego całą tabelę Klasy (na początku pliku znajduje się, tu pominięte, polecenie
CREATE TABLE tworzÄ…ce tabelÄ™ Klasy):
...
INSERT INTO `klasy` VALUES (2, '1B', 1, 'HM', 202, 'Klasa dobra.');
INSERT INTO `klasy` VALUES (3, '1C', 1, 'MI', 316, 'Klasa przeciętna.');
INSERT INTO `klasy` VALUES (4, '1D', 1, 'OG', 422, 'Klasa przeciętna.');
INSERT INTO `klasy` VALUES (5, '2A', 2, 'OG', 504, 'Klasa dobra.');
INSERT INTO `klasy` VALUES (6, '2B', 2, 'MI', 610, 'Klasa dobra.');
INSERT INTO `klasy` VALUES (7, '2C', 2, 'OG', 720, 'Klasa trudna.');
...
Nie ma tu nazw kolumn - w VALUES jest komplet wartości, które są wstawiane do rekordu, łącznie z kluczami
podstawowymi. Nie można oczywiście zostawić ich generowania systemowi, bo klucze te mogły być już użyte w
połączeniach z innymi tabelami.
Wyżej wstawiliśmy za pomocą INSERT rekord do tabeli Klasy, a system sam określił wartość klucza
podstawowego. Załóżmy, że klucza nowej klasy musimy użyć w rekordach uczniów, którzy będą do niej
przypisani. Oczywiście moglibyśmy zajrzeć do wstawionego rekordu klasy, sprawdzić jaka wartość została
nadana kluczowi i jej użyć. Więcej, moglibyśmy sami wybrać sobie dla nowej klasy dowolny klucz, np. 4567,
wiedząc, że jest unikalny, podać go explicite w poleceniu INSERT i nadawać go potem uczniom, którzy mają
należeć do tej klasy. Ale takie "rękodzieło" może być używane przy prostych i co ważniejsze, małych tabelach,
zawierających niewiele rekordów, w dodatku rzadko modyfikowanych, takich jak tabele naszego kursu właśnie.
W dużych portalach czy systemach komercyjnych, gdzie na sekundę realizowane są dziesiątki jeśli nie setki
operacji wstawiania rekordu, obsługa kluczy podstawowych nowych rekordów musi być zautomatyzowana. Jak
zatem dotrzeć do klucza wstawionego automatycznie do rekordu i wstawić go do nowego rekordu jako klucz
obcy w innej połączonej tabeli, też automatycznie?
Strona 41 z 44
UPDATE
Polecenie UPDATE służy do modyfikowania zawartości istniejących rekordów. W UPDATE podaje się
nazwę tabeli, której rekordy mają być modyfikowane oraz, w opcjach
·ð SET - które pola w modyfikowanym rekordzie jakie majÄ… mieć nowe wartoÅ›ci, i w
·ð WHERE - które rekordy majÄ… być modyfikowane (kryterium wyboru takie samo jak w SELECT).
Jeśli nie poda się opcji WHERE, modyfikowane będą wszystkie rekordy w tabeli.
Oto polecenie, które wszystkim klasom z poziomu 1 nadaje poziom 2 (np. na koniec roku szkolnego):
UPDATE Klasy SET Poziom = 2 WHERE Poziom=1;
I zmiana profilu klasy o nazwie '2D' na profil matematyczno-informatyczny (MI):
UPDATE Klasy SET Profil='MI' WHERE Nazwa='2D';
Reszta rekordów pozostanie bez zmian. Można w jednym poleceniu zmieniać kilka pól. Załóżmy, że
szkoła w następnym roku staje się szkołą o profilu matematyczno-informatycznym. W kolejnym roku szkolnym [ Pobierz całość w formacie PDF ]