wtorek,
SQL: Usuwanie rekordów
W języku SQL usuwanie rekordów z tabeli realizowane jest przy użyciu polecenia DELETE. W dalszej części materiału znajdziesz zgodne z dialektem SQL stosowanym w MySQL przykłady zapytań z wykorzystaniem tej instrukcji. Pamiętaj, że DELETE usuwa dane bezpowrotnie, więc należy używać tego polecenia z ostrożnością. Warto również zauważyć, że niektóre systemy zarządzania bazami danych wymagają użycia DELETE z klauzulą WHERE, w przeciwnym wypadku operacja może nie zostać wykonana. Polecenie DELETE w MySQL może być używane w połączeniu z opcjami LOW_PRIORITY, QUICK, i IGNORE w celu modyfikacji zachowania operacji usuwania.
Przykłady zapytań
Usuwanie wszystkich danych z tabeli
DELETE FROM pracownicy;
To zapytanie usunie wszystkie wiersze z tabeli pracownicy.
Usuwanie wierszy spełniających określone kryterium
DELETE FROM pracownicy WHERE dzial = 'Księgowość';
Tutaj usunięte zostaną wszystkie wiersze, w których kolumna dzial ma wartość 'Księgowość'.
Usuwanie wierszy z określonym zakresem dat
DELETE FROM zamowienia WHERE data_zamowienia < '2021-01-01';
To zapytanie usunie wszystkie zamówienia złożone przed 1 stycznia 2021.
Kilka warunków
DELETE FROM produkty WHERE cena < 100 AND ilosc_na_stanie < 50;
Usunięte zostaną produkty, których cena jest niższa niż 100 oraz mają mniej niż 50 sztuk na stanie.
Usuwanie wierszy na podstawie innej tabeli
DELETE FROM pracownicy WHERE id IN (SELECT id_pracownika
FROM umowy WHERE data_zakonczenia < '2022-12-31');
Usunięci zostaną pracownicy, których umowy zakończyły się przed końcem 2022 roku.
Opcje LOW_PRIORITY, QUICK, i IGNORE
LOW_PRIORITY
DELETE LOW_PRIORITY FROM tabela WHERE warunek;
Zapytanie LOW_PRIORITY opóźni usuwanie do czasu, aż nie będzie żadnych oczekujących odczytów z tabeli. Pozwala to uniknąć zakłócania zapytań odczytujących dane z tej samej tabeli.
QUICK
DELETE QUICK FROM tabela WHERE warunek;
Opcja QUICK powoduje, że MySQL nie będzie łączył indeksów w trakcie usuwania, co może przyspieszyć operację usuwania w niektórych przypadkach, zwłaszcza w tabelach z dużą ilością wierszy. Warto jednak pamiętać, że może to spowodować fragmentację indeksów.
IGNORE
DELETE IGNORE FROM tabela WHERE warunek;
Użycie IGNORE sprawi, że MySQL zignoruje błędy podczas operacji usuwania, takie jak próby usunięcia wierszy, które nie istnieją, lub naruszenia ograniczeń klucza obcego. Zamiast zatrzymać operację, MySQL kontynuuje i usuwa wszystkie wiersze spełniające warunek.