Modyfikacja i usuwanie danych
Baza danych
W tym e‑materiale poznamy sposoby modyfikacji zawartości bazy danych na przykładzie bazy danych Pracownicy, którą zamieszczamy w wersjach dla programu LibreOffice Base oraz Microsoft Access. Odpowiedni plik należy pobrać i zapisać na dysku.
Pracownicy dla programu LibreOffice Base.Pracownicy dla programu Microsoft Access.W wybranym programie otwórz pobraną bazę. Wykorzystaj widok projektu tabeli oraz widok relacji, aby poznać schemat bazy danych.
Żeby wykonywać omówione dalej zapytania SQL w programie LibreOffice Base, wybieramy polecenie Narzędzia | SQL, natomiast w programie Microsoft Access wybieramy wstążkę Tworzenie, następnie Projekt kwerendy, zamykamy okno Pokazywanie tabeli i klikamy ikonę SQL.
Modyfikacja danych
Modyfikowanie danych to jedna z podstawowych operacji CRUDCRUD, które możliwe są do wykonania w bazie danych.
Załóżmy, że zmieniamy profil działania firmy i nazwę stanowiska „goniec” należy zastąpić nazwą „kurier”. Jak odpowiednio zmienić dane w bazie?
Dzięki temu, że nazwy stanowisk są w osobnej tabeli stanowiska, a nie np. w tabeli place lub pracownicy, zmiany wymaga tylko jedna wartość. W języku SQL mamy instrukcję aktualizującą dane, której ogólna postać jest następująca:
Wykorzystamy tę klauzulę do zmiany nazwy stanowiska. Na początku wyświetlimy listę stanowisk.
Na liście wyników powinniśmy zobaczyć rekord o identyfikatorze 7 i tekście „goniec” w polu stanowisko. Do wskazania rekordu, który chcemy zaktualizować, możemy użyć dotychczasowej nazwy stanowiska:
w LibreOffice Base:
w Microsoft Access:
W bazach danych obsługiwanych przez strony internetowe o wiele częściej rekordy wskazuje się przez klucze główne, które są osadzane w formularzach i przesyłane później do serwera. Nasze zapytanie może więc wyglądać również następująco:
w LibreOffice Base:
w Microsoft Access:
Korzystanie z kluczy głównych konieczne jest wtedy, gdy aktualizujemy dane w tabelach zależnych.
W bazie danych przechowujemy informacje o telefonach i mailach pracowników. Załóżmy, że zmienił się telefon do pana Igora Majchrzaka i musimy zaktualizować tę informację w bazie.
W tabeli kontakty rekordy przyporządkowane są do pracowników za pomocą kluczy obcych, czyli unikalnych wartości kluczy głównych z tabeli pracownicy. Musimy więc odczytać identyfikator pracownika. Użyjemy zapytania:
w LibreOffice Base:
w Microsoft Access:
Przedstawiona kwerenda zwraca identyfikator, który pozwala wskazać rekord odpowiadający danemu pracownikowi w tabeli zależnej. Użyjemy tej kwerendy w podzapytaniu, aby zmienić dane:
w LibreOffice Base:
w Microsoft Access:
Po wykonaniu kodu możemy użyć zapytania wybierającego wszystkie rekordy z tabeli kontakty do sprawdzenia, czy dane zostały zmienione.
Gdy zmieniamy dane, podstawowym wymogiem jest poprawne skonstruowanie warunku identyfikującego rekordy przeznaczone do zmiany.
Usuwanie danych
Usuwanie, podobnie jak zmienianie danych, jest również jedną z podstawowych operacji CRUDCRUD implementowanych w każdej bazie.
Załóżmy, że rozwiązaliśmy umowę o pracę z jednym z pracowników i chcemy usunąć dane tego pracownika z głównej bazy (w kopii będziemy mieli je dalej zachowane).
Przed usuwaniem danych możemy wykonać kopię przynajmniej najważniejszych informacji. Poniższe zapytania wybierają wszystkie rekordy z tabeli pracownicy i zapisują w tabeli pracownicy_kopia.
W LibreOffice Base:
Po wykonaniu tej operacji wybierz polecenie Widok | Odśwież tabele, aby tabela pracownicy_kopia pojawiła się na liście.
W Microsoft Access:
Polecenie DELETE usuwa całe rekordy, dlatego poza wskazaniem tabeli podajemy warunek wybierający rekordy do usunięcia. Spróbujemy więc usunąć dane pracownika o identyfikatorze 4 (Uwaga! Mogą pojawić się problemy, które opisane zostały poniżej).
w LibreOffice Base:
w Microsoft Access:
Podczas próby wykonania zapytań w obydwu programach zobaczymy ostrzeżenie o naruszeniu integralności danych. Ostrzeżenia są wynikiem relacji, która łączy tabelę pracownicy i place: identyfikator pracownika o wartości 4 występuje w tabeli place jako klucz obcy.
W takim wypadku usunięcie danych o pracowniku z identyfikatorem 4 wymaga wcześniejszego usunięcia związanych z nim danych w tabelach powiązanych: place i kontakty. W sumie wykonujemy trzy zapytania:
w LibreOffice Base:
w Microsoft Access wykonujemy zapytania pojedynczo:
Zastanówmy się, czy zawsze konieczne jest usuwanie danych z tabel zależnych zanim usuniemy je z tabeli głównej. Wszystko zależy od sposobu zdefiniowania ograniczeń nałożonych na relacje łączące tabele.
W LibreOffice Base podczas definiowania relacji oprócz połączenia pól możemy zaznaczyć w narzędziu Opcje usuwania opcję Usuń kaskadowo:

W Microsoft Access oprócz wymuszania więzów integralności w oknie definiowania relacji możemy zaznaczyć Kaskadowo usuń rekordy pokrewne:

W języku SQL ograniczenia te zdefiniowane musiałyby być w poleceniach tworzących tabele zależne przy użyciu klauzuli ON CASCADE, np.:
Podsumowując, jeżeli podczas definiowania relacji łączącej tabelę zależne z główną nałożono ograniczenie kaskadowego usuwania rekordów, do usunięcia danych – w tym wypadku pracownika – można użyć jednego polecenia, które próbowaliśmy wydać na początku.
W usuwaniu danych kluczowe jest precyzyjne wskazywanie rekordu (bądź rekordów) poprzez odpowiedni warunek w klauzuli WHERE. W przeciwnym wypadku może dojść do utraty danych, które nie powinny być usunięte.
Instrukcja DELETE FROM nazwa_tabeli usuwa wszystkie rekordy z podanej tabeli.
Słownik
(ang. create, read, update, delete) zestaw podstawowych operacji wykonywanych na bazach danych, możliwość dodawania nowych danych (create), odczytywania ich (read), aktualizowania (update) i ich usuwania (delete)
schematyczny opis tabel (zwanych encjami), ich atrybutów (pól, kolumn) oraz ich typów danych, a także związków między tabelami, czyli relacji
tabela, która umożliwia tworzenie relacji wiele‑do‑wielu