Zmiana rekordów
Do zmiany danych zapisanych w bazie danych służy polecenie UPDATE
o następujacej składni:
UPDATE [LOW_PRIORITY][IGNORE] nazwa_tabeli
Klauzula
SET kolumna1=wyrazenie1, kolumna2=wyrazenie2,...
[WHERE warunek]
[ORDER BY kryteria_porzadkowania]
[LIMIT ilosc];WHERE
ogranicza zakres modyfikacji do wskazanego zbioru wierszy, natomiast liczbę wierszy można limitować za pomocą LIMIT
. Klauzula ORDER BY
jest zazwyczaj stosowana w połączeniu z klauzulą LIMIT
- jeżeli chcemy przykładowo zmienić tylko pięć pierwszych wierszy, to najpierw musimy je odpowiednio uporządkować. LOW_PRIORITY
powoduje, że wykonanie instrukcji zostanie odłożone do momentu, gdy żaden inny klient nie będzie czytał danych z tabeli. IGNORE
powoduje ignorowanie błędów, które mogą pojawić się podczas wykonywania operacji.
Ćwiczenie 4_3_1_1. W bazie danych ksiegarnia_internetowa podnieść ceny wszystkich książek o 5%
Napierw zajrzyj do tabel bazy. W celu wykonania zadania, należy zastosować polecenie UPDATE
, bez klauzuli WHERE
:
UPDATE ksiazki
SET cena=cena*1.05;


Porównaj ceny książek. Czy wszystkie wzrosły? Nie wzystkie, ponieważ w drugim wierszu Delphi 4 dla każdego miało i ma nadal cenę 99.99
. Gdzie więc jest błąd? Zajrzyj najpierw do ćwiczenia w którym tworzyliśmy tabele. Tworząc tabelę ksiazki
zastosowaliśmy warunek cena FLOAT(4,2)
, który uniemożliwia nam wpisanie liczby składającej się z więcej jak czterech cyfr. Największą taką liczbą pisaną z dokładnością 2 cyfr po przecinku jest 99.99. Tak więc tej granicy nie możemy teraz przekroczyć. Tego błędu nie zauważyliśmy wcześniej wypełniając tabele danymi, cenę wspomnianej książki określiliśmy tam na 120.34
. Czy możemy naprawić ten błąd? Tak, zrobimy to podczas następnych zajęć.
Ćwiczenie 4_3_1_2. W bazie danych ksiegarnia_internetowa uaktualnić adres jednego klienta
Należy zastosować następujące polecenie SQL:
UPDATE klienci
SET adres='Zmieniona 12'
WHERE klient_id=5;


Czy adres został zmieniony? Tak - pan Józef Koń
mieszka teraz przy ulicy Zmieniona 12
.