Database
 sql >> Baza danych >  >> RDS >> Database

SQL DELETE dla początkujących

Ten artykuł zawiera podstawowe informacje o języku SQL DELETE instrukcje, których początkujący mogą używać do usuwania danych ze swoich tabel bazy danych.

Usuń pojedynczy wiersz

Oto podstawowy przykład polecenia SQL DELETE oświadczenie.

DELETE FROM Owners
WHERE OwnerId = 5;

W tym przypadku usuwamy wiersz, w którym OwnerId kolumna ma wartość 4 .

DELETE instrukcja zaczyna się od DELETE FROM , a następnie nazwa tabeli (tj. tabela zawierająca dane, które chcesz usunąć).

W niektórych systemach zarządzania bazami danych (DBMS), FROM słowo kluczowe jest opcjonalne, ale dobrym pomysłem jest jego uwzględnienie dla lepszej przenośności (w przypadku, gdy musisz uruchomić ten sam kod w innym DBMS).

Zawsze należy dołączyć WHERE klauzuli, chyba że chcesz usunąć wszystkie wiersze z tabeli.

Tak, dobrze to przeczytałeś. Pominięcie WHERE klauzula usunie wszystkie wiersze w tabeli.

Większość DBMS ma różne inne opcje, których można użyć z DELETE oświadczenie, ale te wymienione tutaj są najczęściej używane.

Zwróć uwagę, że DELETE instrukcja usuwa cały wiersz. Nie można usunąć wartości pojedynczej kolumny w wierszu. Aby to zrobić, użyj SQL UPDATE oświadczenie.

Przykład

W tym przykładzie usuwamy dane z tabeli.

Przede wszystkim zobaczmy, co jest w tabeli.

SELECT * FROM Owners;

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Stallone   | (489) 591-0408 | NULL              |
| 4         | Boris       | Biden      | (349) 611-8908 | [email protected] |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

OK, usuńmy właściciela numer 5, a następnie ponownie wybierz tabelę.

DELETE FROM Owners
WHERE OwnerId = 5;

SELECT * FROM Owners;

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Stallone   | (489) 591-0408 | NULL              |
| 4         | Boris       | Biden      | (349) 611-8908 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

Widzimy, że ostatni wiersz został usunięty zgodnie z opisem.

Klucze obce

Możesz otrzymać błąd, jeśli spróbujesz usunąć dane, do których odwołuje się klucz obcy w innej tabeli. Dzieje się tak, ponieważ tabela, z której próbujesz usunąć dane, jest tabelą nadrzędną w relacji. Tabela z kluczem obcym (tabela podrzędna) opiera się na danych z tabeli nadrzędnej (tj. danych, które próbujesz usunąć).

To, czy pojawi się błąd, czy nie, zależy od konfiguracji klucza obcego. Większość DBMS obsługuje różne opcje radzenia sobie z tą sytuacją. Takie opcje mogą obejmować zgłoszenie błędu, kaskadowe usunięcie do tabeli kluczy obcych (tj. usunięcie wiersza z tabeli podrzędnej), ustawienie klucza obcego na NULL lub ustawiając ją na wartość domyślną.

Oto przykład próby usunięcia wiersza, do którego odwołuje się klucz obcy.

DELETE FROM Owners
WHERE OwnerId = 3;

Wynik:

Msg 547, Level 16, State 0, Line 1
The DELETE statement conflicted with the REFERENCE constraint "FK_Pets_Owners". The conflict occurred in database "PetHotel", table "dbo.Pets", column 'OwnerId'.

The statement has been terminated.

W tym przypadku został zgłoszony błąd i wiersz nie został usunięty.

W tym przykładzie Owners.OwnerId kolumna jest kluczem podstawowym tej tabeli. Kolejna tabela o nazwie Pets ma OwnerId kolumna, która odwołuje się do tej kolumny klucza podstawowego, aw tym przypadku co najmniej jeden wiersz odwołuje się do numeru właściciela 3.

Gdybym naprawdę chciał usunąć ten wiersz, musiałbym zaktualizować dane w tabeli podrzędnej, aby żadne wiersze nie wskazywały tego właściciela. Albo zmodyfikuj klucz obcy, aby używał innej opcji, gdy operacje usuwania są wykonywane na kluczu podstawowym. Modyfikowanie klucza obcego może być niepożądaną opcją, w zależności od tego, co musisz zrobić. W zależności od systemu DBMS może to również wymagać usunięcia istniejącego klucza i odtworzenia go.

W każdym razie ten błąd jest dobrą rzeczą, ponieważ ostrzega nas o problemie, który pojawi się, jeśli usuniemy ten wiersz. Pomaga wymusić integralność referencyjną.

Uwaga! Zapominanie WHERE Klauzula

DELETE oświadczenie może być bardzo niebezpieczne. Jeśli pominiesz WHERE klauzula, usuniesz wszystkie wierszy w tabeli.

Na szczęście możesz zostać uratowany przez ograniczenia klucza obcego, jeśli spróbujesz usunąć dane z tabeli nadrzędnej relacji.

Ale co, jeśli tak nie jest. Co się stanie, jeśli w instrukcjach usuwania nie pojawią się żadne błędy?

Dowiedzmy Się!

Uruchommy kolejne DELETE oświadczenie, ale tym razem zapomnimy dołączyć WHERE klauzula. Ponadto, tym razem uruchomimy go na tabeli, która nie jest rodzicem w związku.

Najpierw zobaczmy, co jest w tabeli.

SELECT * FROM Pets;

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

OK, więc mamy osiem zwierzaków. Widzimy, że trzy zwierzaki należą do właściciela numer 3 – właściciela, którego próbowaliśmy usunąć w poprzednim przykładzie. Właśnie dlatego otrzymaliśmy błąd.

W każdym razie przejdźmy dalej i uruchom nasze DELETE instrukcja bez WHERE klauzuli, a następnie ponownie sprawdź tabelę

DELETE FROM Pets;

SELECT * FROM Pets;

Wynik:

(8 rows affected)
(0 rows affected)

(8 rows affected) część oznacza, że ​​osiem wierszy zostało usuniętych.

(0 rows affected) część oznacza, że ​​nie wybrano żadnych wierszy (ponieważ w tabeli nie ma wierszy).

Ups!

Może się zdarzyć, że będziesz musiał usunąć wszystkie wiersze w tabeli. W zależności od wielkości stołu, to oświadczenie będzie wszystkim, czego potrzebujesz.

Jeśli chcesz usunąć większą tabelę, dostępna jest również opcja TRUNCATE TABLE , który usuwa wszystkie wiersze z tabeli lub określonych partycji tabeli, bez rejestrowania usunięć poszczególnych wierszy (pole DELETE oświadczenie rejestruje te usunięcia).

Dlatego TRUNCATE TABLE jest szybszy i zużywa mniej zasobów systemowych i dzienników transakcji.

Przykład użycia TRUNCATE TABLE :

TRUNCATE TABLE Owners;

Należy zauważyć, że może to nie zadziałać, jeśli do tabeli odwołuje się ograniczenie klucza obcego, nawet jeśli nie ma wierszy podrzędnych. W takich przypadkach DELETE może działać zamiast tego.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Testowanie obciążenia sieciowego za pomocą iPerf

  2. Typy danych SQL:5 najgorszych wyborów, których musisz dzisiaj zatrzymać

  3. Dell Boomi

  4. Praca z interfejsami API JavaFX Chart

  5. Jak utworzyć tabelę z kluczem obcym w SQL?