04. Tworzenie, zmienianie i usuwanie rekordów.txt

(28 KB) Pobierz
#85
Rozdział 4.
Tworzenie, zmienianie i usuwanie rekordów

Po utworzeniu w bazie danych tabel, kolejny krok polega na wypełnieniu ich danymi. Najpierw należy zgromadzić dane, które majš zostać wprowadzane do bazy, a następnie sprawdzić ich poprawnoć. Ostatni etap polega na wprowadzeniu danych wykorzystujšc instrukcję INSEKT.
Poza instrukcjš INSEKT do wprowadzania zmian w zawartoci tabeli służš jeszcze dwie inne instrukcje SQL: UPDATE i DELETE. W tym rozdziale zostanš omówione wszystkie te trzy instrukcje. Będzie też mowa o trzech innych poleceniach, stosowanych do utrzymania bazy danych: TRUNCATE, DROP i ALTER.

Przygotowanie danych

Przed wprowadzeniem danych do bazy bardzo istotne jest sprawdzenie, czy dane sš zgodne z konwencjami i założeniami przyjętymi dla danych tego typu. Na przykład wprowadzajšc dane do kolumny, która przechowuje pewien stan: aktywny lub nieaktywny, należy z góry okrelić, jakie dwie wartoci będš stosowane do reprezentowania bieżšcego stanu tego pola. Można stosować wartoci prawda i fałsz, tak i nie albo nawet 1 i 0. Najważniejsze, aby dane w całej kolumnie były wpisywane zgodnie z raz przyjętš konwencjš. Dużym ułatwieniem w tym wypadku jest użycie typu danych BIT, który przyjmuje tylko dwie wartoci, a więc wszystkie dane w kolumnie na pewno będš zgodne zjedna konwencjš. Nie przestrzeganie tych zasad może znacznie utrudnić pobieranie danych oraz analizę wyników zapytań.
Wemy pod uwagę numer telefonu jako typ wartoci wprowadzanych do bazy. W wielu przypadkach zostaje on podzielony kropkami, jak na przykład: 919.555.1212, innym razem używa się notacji amerykańskiej (919) 555-1212. Najlepszym rozwišzaniem jest wprowadzanie numeru bez dodatkowych elementów formatujšcych.
#86
Najważniejsze jest, by stosować zawsze tylko jednš konwencję bez względu na to, którš wybralimy. W przypadku nie stosowania się do tej zasady numer telefonu wpisany kilkakrotnie, za każdym razem w innym formacie w bazie danych będzie uważany za inny.
Z przedstawionych przykładów wynika wniosek, że przydatnoć zgromadzonych w bazie danych informacji w dużym stopniu zależy od poprawnego i zgodnego z przyjętymi, jednolitymi konwencjami sformatowania, które musi nastšpić przed zapisaniem danych do bazy. Inne elementy wpływajšce na jakoć sformatowania danych to: używanie wielkich liter zgodnie z przyjętymi zasadami, unikanie spacji poprzedzajšcych oraz kończšcych wprowadzane łańcuchy i nie wnoszšcych żadnych dodatkowych informacji. Po dokonaniu analizy poprawnoci przygotowanych danych można przystšpić do ich wprowadzania do tabel.

Instrukcja INSERT

INSERT jest jedynš instrukcjš języka SQL służšcš do dopisywania nowych rekordów do tabel. Wyrażenie typu SELECT ... INTO może być wykorzystane do utworzenia tabeli i jednoczesnego wypełnienia jej wierszami. Instrukcja INSERT powoduje dodanie rekordów do tabeli jeden po drugim. Wykorzystujšc podzapytania (omówiono je dokładnie w rozdziale 9.) można także za jej pomocš kopiować dane między tabelami.
Podstawowa struktura instrukcji INSERT wyglšda następujšco:

INSERT INTO nazwa_tabeli
[(lista_kolumn)]
VALUES (lista_wartoci)

Nazwa_tabeli okrela tabelę, do której chcemy wprowadzić nowy rekord (lub rekordy). W przypadku, gdy chcemy wprowadzić wartoci tylko dla niektórych kolumn, pozwalajšc resztę uzupełnić wartociami dla nich domylnymi, należy podać nazwy kolumn, do których chcemy wprowadzić wartoci.
Pominięcie listy kolumn w instrukcji INSERT wymusza podanie wartoci dla wszystkich kolumn w tabeli.
Przyjrzyjmy się przykładowej instrukcji, która tworzy nowy rekord w tabeli stu-dios. Jeżeli nie podamy listy kolumn, to musimy podać wartoci dla każdej kolumny w kolejnoci, jaka była ustalona podczas definicji tabeli.
===================
Rada
W większoci baz danych kolumny w tabeli pojawiajš się w porzšdku, w jakim zostały utworzone. Definiujšc nowš tabelę przy pomocy instrukcji CREATE TABLE kolumny zachowujš kolejnoć, w jakiej zostały wypisane. Nowe kolumny dopisane do tabeli przy pomocy instrukcji ALTER TABLE pojawiajš się na końcu tej listy.
===================
#87
-------------------------
Listing 4.1. Dopisanie rekordu do tabeli Studios, przy pomocy instrukcji INSEKT

INSEKT INTO Studios
VALUES (1, 'Giant', 'Los Angeles', 'CA')

1 rów created
-----------------------

Tabela Studios składa się z następujšcych kolumn: studio_id, studio_name, studio_city, studio_state. Instrukcja INSERT zadziała prawidłowo, ponieważ kolejnoć podana w sekcji VALUES odpowiada kolejnoci kolumn w tabeli. W przypadku, gdy nie jestemy pewni w jakiej kolejnoci występujš kolumny w tabeli, możemy wypisać listę kolumn jak na listingu 4.2.
-----------------------
Listing 4.2. Instrukcja INSERT z podanš listš kolumn

INSERT INTO Studios
(studio_city, studio_state, studio_name,
studio_id y>VALUES ('Burbank', 'CA', 'MPM', 2)

1 rów created
-----------------------

Jak wynika z powyższego przykładu, w przypadku podania listy kolumn, dla których wartoci pojawiajš się w klauzuli VALUES, nie ma znaczenia kolejnoć kolumn.
=================
Rada
W praktyce lepiej jest zawsze podawać listę kolumn w instrukcji INSERT, ponieważ kod jest wtedy bardziej przejrzysty i łatwiejszy do analizy. Szczególnie w przypadku tabel składajšcych się z wielu kolumn, zapamiętanie ich nazw i kolejnoci może sprawić spore problemy, jeżeli pominiemy listę kolumn.
==================

Wprowadzanie wartoci domylnych i wartoci nuli

Dysponujemy dworna metodami do wprowadzenia wartoci null do pola w tabeli. W pierwszym przypadku, jeżeli pole ma zadeklarowanš wartoć domylnš jako null, możemy użyć instrukcji INSERT pomijajšc wybranš kolumnę na licie kolumn.
-----------------------
Listing 4.3. Wprowadzenie nowego rekordu z wartociami null

INSERT INTO People
(person_id, person_fname, person_lname,)
VALUES (l, 'Leon', 'Bruk', '543890123')

1 rów created
-----------------------

Leon Bruk został wpisany do bazy danych, ale większoć pól tabeli została pusta.
-----------------------
Listing 4.4. Instrukcja SELECT wyszukujšca dopisany rekord

SELECT *
FROM People
WHERE person_id=l
#88
PERSON_ID    PERSON_FNAME	PERSON_LNAME
-------------------------	-------------
PERSON_ADDRESS
--------------------------------------------
PERSON_CITY		PERSON_UNION
------------	--------------------------
1       Leon   Bruk
				543890123
--------------------

Wyobramy sobie sytuację, gdy chcemy dopisać nowš osobę do tabeli People, znajšc tylko jej imię, nazwisko i numer ubezpieczenia. Gdy pominiemy pozostałe kolumny w instrukcji INSEKT, dopisanie rekordu odbędzie się zgodnie z naszym oczekiwaniem: w pozostałych polach rekordu będš wartoci NULL.
Jak widać, rekord składa się w większoci z pustych pól, ponieważ w instrukcji IN-SERT nie zostały podane dla nich żadne wartoci. Zwróćmy jednak uwagę, że w polu person_union pojawia się wartoć y, a to dlatego, że jest dla tego pola wartociš domylnš. Aby wprowadzić wartoć null do tego pola, należy podać wprost nazwę kolumny oraz wartoć NULL, tak jak pokazuje listing 4.5.
--------------------
Listing 4.5. Wprowadzanie wartoci null w instrukcji INSEKT

INSERT INTO People
(person_id, person_fname, person_lname, person_ssn, person_union)
VALUES (1, 'Leon', 'Bruk', '543890123', NULL)

1 rów created
--------------------

Instrukcja INSERT z listingu 4.5 umieszcza wartoć null w polu person_union zamiast domylnej wartoci y. Taka operacja jest możliwa bez względu na zadeklarowany w polu typ danych, pod warunkiem, że dopuszczalne jest wprowadzanie wartoci null dla danej kolumny. Jak pokazano w sposób poredni na listingu 4.3, wprowadzenie wartoci domylnych dla wybranych kolumn polega na pominięciu ich w instrukcji INSERT zarówno w sekcji listy kolumn, jak na licie wartoci.

Równoczesne użycie instrukcji SELECT i INSERT

W tym miejscu zajmiemy się wykorzystaniem podzapytań. Podzapytania polegajš na umieszczeniu jednego zapytania wewnštrz innego. Chciałbym pokazać, jak wykorzystać instrukcję SELECT wewnštrz instrukcji INSERT, aby dostarczyć danych do dopisania do tabeli. Szczegóły dotyczšce podzapytań sš wyjanione w rozdziale 9., z kolei opisem składni instrukcji SELECT zajmujš rozdziały od 5. do 9.
Jak pokazałem wczeniej, instrukcja INSERT składa się z trzech częci, z których jedna jest opcjonalna. Pierwsza częć instrukcji wskazuje na tabelę, do której będš dopisywane nowe rekordy. Druga częć to lista kolumn, do których będš dopisywane wartoci. W przypadku, gdy wartoci będš wpisywane do wszystkich kolumn, lista ta może być pominięta. Ostatnia częć dotyczy podania listy wartoci, jakie majš być w nowym rekordzie wpisane.
#89
===============
Rada
Wykorzystanie instrukcji SELECT zagnieżdżonej w instrukcji INSEKT jest szczególnie użyteczne, gdy pracujemy z bazš danych, która nie umożliwia modyfikacji struktury tabel po ich utworzeniu. Chcšc zmodyfikować tabelę w takim systemie musimy wykonać kilka operacji. Po pierwsze, należy utworzyć kopię tabeli, która ma być modyfikowana. Następnie usunšć tabelę ródłowš, a w jej miejsce utworzyć nowš tabelę, odzwierciedlajšcš pożšdane zmiany. Wykorzystanie podzapytania w instrukcji INSEKT znacznie uproci operację kopiowania danych między tabelami.
===============

Zamiast podawania listy wartoci w klauzuli VALUES można tam umiecić instrukcję SELECT, która takich wartoci dostarczy. Załóżmy, że założyłem tabelę, która będzie gromadzić listę miast i stanów jak pokazuje listing 4.6.
--------------------
Listing 4.6. Definicja tabeli Cityjtiate

CREATE TABLE City_State
(city		VARCHAR2(20),
state		CHAR(2) ),

Table created
--------------------

Możemy tę tabelę wypełnić danymi zgromadzonymi w tabeli studios wykorzystujšc instrukcję INSEKT (listing 4.7).
--------------------
Li...
Zgłoś jeśli naruszono regulamin