Usuwanie danych z bazy danych w SQL
Kasowanie informacji zdezaktualizowanych w bazie danych wykonujemy za pomocą zapytania DELETE
. Instrukcja ta służy do kasowania wybranych wierszy z danej tabeli, jeżeli potrzebujemy na przykład wyczyścić całą tabelę to możemy zastosować instrukcję TRUNCATE TABLE
.
Kasowanie wybranych rekordów
Ogólna składnia zapytania DELETE
:
DELETE FROM nazwaTabeli WHERE warunekLogiczny;
Przykład:
DELETE FROM tab1 WHERE id = '1';
Powyższa kwerenda skasuje z tabeli tab1
, wiersze, które będą miały w polu ID
wartość 1
(teoretycznie powinien być to jeden rekord).
Tabela klienci
na której będziemy uruchamiać przykładowe zapytania:
ID | Imie | Nazwisko | Miasto |
1 | Jan | Kowalski | Warszawa |
2 | Michał | Łagoda | Kraków |
3 | Marcin | Kulczyk | Kraków |
4 | Radosław | Sikorski | Kraków |
5 | Monika | Kopacz | Gdańsk |
6 | Piotr | Grabiec | Toruń |
7 | Ewa | Pogodna | Bydgoszcz |
8 | Sebastian | Szybki | Warszawa |
Efekt zapytania:
DELETE FROM klienci WHERE ID = '1';
Uruchomionego na tabeli klienci
:
ID | Imie | Nazwisko | Miasto |
2 | Michał | Łagoda | Kraków |
3 | Marcin | Kulczyk | Kraków |
4 | Radosław | Sikorski | Kraków |
5 | Monika | Kopacz | Gdańsk |
6 | Piotr | Grabiec | Toruń |
7 | Ewa | Pogodna | Bydgoszcz |
8 | Sebastian | Szybki | Warszawa |
Jak widać zniknął pierwszy wiersz. To samo można zrobić dając inny warunek (nie identyfikujący jednoznacznie rekordu). Skasujmy teraz wszystkich klientów z Krakowa:
DELETE FROM klienci WHERE miasto = 'Kraków';
Efekt:
ID | Imie | Nazwisko | Miasto |
5 | Monika | Kopacz | Gdańsk |
6 | Piotr | Grabiec | Toruń |
7 | Ewa | Pogodna | Bydgoszcz |
8 | Sebastian | Szybki | Warszawa |
Usuwanie całej zawartości
Kasowanie rekordu po rekordzie przy milionie pozycji może być nieco męczące. Twórcy SQL pomyśleli również i o tym aspekcie dodając instrukcję TRUNCATE TABLE
. Ogólna składnia:
TRUNCATE TABLE nazwaTabeli;
Przykład:
TRUNCATE TABLE klienci;
Efekt:
ID | Imie | Nazwisko | Miasto |
Tabela klienci
jest pusta.
Dzień dobry, chce usunąć rekordy w 3 tabelach jeśli klient nie wykonał żadnego zamówienia w poprzednim miesiącu.Jak napisać zapytanie w celu usunięcia rekordów z kilku tabel t1, t2, t3 gdy warunkiem usunięcia jest where = t3.data> poprzedni miesiąc. Z góry dziękuję za odpowiedź.
DELETE FROM t1 WHERE t3Id NOT IN ( SELECT id FROM t3 WHERE data >= NOW() – INTERVAL 1 MONTH );
DELETE FROM t2 WHERE t3Id NOT IN ( SELECT id FROM t3 WHERE data >= NOW() – INTERVAL 1 MONTH );
Dzień dobry potrzebuje zapytanie do usunięcia plików starszych jak 7dni da się wogóle takie coś napisać w sql ?
Cześć Hubert,
Jeśli chodzi o usuwanie plików to bezpośrednio z poziomu bazy danych oraz SQL tego nie da się zrobić.
A jakiś pomysł na to?
Hubert, to nie jest temat związany z SQL :)
Usuwanie plików starszych niż 7 dni (o ile to jeszcze jest komuś potrzebne):
powershell.exe „Get-ChildItem -Path \”C:\_tutaj_folder_z_plikami_\” -Force -ea 0 | ?{ !$_PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | ForEach-Object { $_ | Remove-Item -Force }”
Witam,
a jak wyczyścić całą zawartość kolumny? Podkreślam – tylko zawartość a nie kolumnę.