Loading:

Książka Zend Framework 3. Poradnik Programisty.

Dostępne funkcje dla DELETE - MySQL

Składnia polecenia DELETE jest mniej więcej następująca:

 

DELETE [PARAMETRY] FROM tabela [OPCJE]]


Składnia polecenia DELETE różni się nieznacznie w zależności od tego, czy chcemy usunąć dane z jednej tablicy czy też z kilku tabel jednocześnie.

 

W przypadku usuwania danych z jednej tablicy: (patrz Listing 1.0)

 

W przypadku usuwania danych z kilku tablic: (patrz Listing 2.0)

 

lub też (patrz Listing 3.0)

 

Za pomocą polecenia DELETE możemy usunąć wiersze danych z tablicy, które spełniają odpowiednie warunki wymienione w klauzuli WHERE. Polecenie DELETE zwraca liczbę usuniętych wierszy danych.

 

 

  • Uwaga! Jeśli wykonamy polecenie DELETE bez klauzuli WHERE, wtedy usunięte zostają wszystkie dane ze wskazanej tablicy. Znacznie szybszą metodą usunięcia wszystkich danych z tablicy jest użycie polecenia TRUNCATE TABLE nazwa_tablicy, przy czym nie zostanie wtedy zwrócona liczba usuniętych rekordów (wierszy).

 

  • Jeśli w poleceniu DELETE podamy parametr LOW_PRIORITY wtedy wykonanie DELETE jest opóźniane dopóty, dopóki nie wykonają się wszystkie inne polecenia na danej tablicy.

 

  • Jeśli w poleceniu DELETE podamy parametr QUICK w przypadku usuwania danych z tablicy typu MyISAM, wtedy istnieje szansa przyspieszenia w niektórych przypadkach usuwania danych.

 

  • Parametr IGNORE powoduje ignorowanie wszytkich błędów pojawiających się podczas usuwania rekordów. Błędy, które są ignorowane podczas wykonywania DELETE z parametrem IGNORE są zgłaszane jako ostrzerzenia.

 

  • W przypadku tablic typu MyISAM, usuwane rekordy są zachowywane na specjalnej liście, i bezpośrednio później wykonane polecenie SELECT zwraca usunięte rekordy. Oznacza to, że usuwane dane zajmują cały czas zasoby komputera. Można to zmienić używając polecenia OPTIMIZE TABLE lub myisamchk i zmieniając tablicę.

 

  • Opcja LIMIT liczba_wierszy ogranicza liczbę usuwanych rekordów do liczba_wierszy.\ Przydatne jest to w przypadku, gdy chcemy się upewnić, że nasze polecenie DELETE nie zajmie zbyt dużo czasu pracy bazy. Można powtarzać to polecenie dopóty, dopóki nie zostanie przekroczona liczba wierszy do usunięcia.

 

  • Jeśli użyjemy polecenia DELETE razem z klauzulą ORDER BY wtedy możemy usuwać rekordy w kolejności takiej, jaka zostanie obliczona po wykonaniu sortowania. Jest to bardzo użyteczne w połączeniu z opcją LIMIT. Na przykład w poniższym przykładzie znajdowane są rekordy pasujące do klauzuli WHERE, następnie sortowane względem danych typu timestamp i usuwany jest tylko jeden z nich (najstarszy): (patrz Listing 4.0)

 

  • Można usuwać dane z kilku tabel jednocześnie. Pierwsza, podana wyżej, składnia umożliwia usuwanie danych tylko z tablic wymienionych przed klauzulą FROM. Druga składnia umożliwia usuwanie danych tylko z tych tablic, które zostały wymienione przed klauzulą USING. Efekt jest taki, że można usuwać dane z kilku tablic jednocześnie i również mieć dodatkowe tablice, które są używane podczas szukania, ale z których nie usuwamy danych (patrz na Listing 5.0)

 

  • Jeśli chcemy usuwać dane z kilku tabel relacyjnych typu InnoDB, w których zdefiniowane są klucze obce, wtedy usuwanie rekordów poleceniem DELETE może odbywać się w innej kolejności niż powinno to wynikać z relacji pomiędzy tablicami. W takim wypadku wykonanie polecenia DELETE nie powiedzie się a ropoczęte usuwanie danych jest odwracane i dane sa bezpieczne. W takim przypadku, można usuwać dane tylko z jednej tablicy i polegać na możliwościach składni ON DELETE używanego przy konstrukcji tablicy, która sprawi, że odpowiednie tablice relacyjne zostaną zmodyfikowane jak należałoby się tego spodziewać (pod warunkiem że dobrze zdefiniujemy relacje pomiędzy danymi w różnych tablicach!).


Napisz Artykuł

Listing

--Listing 1.0
DELETE
  [LOW_PRIORITY] [QUICK] [IGNORE] FROM tabela
  [WHERE definicje_skąd]
  [ORDER BY ...]
  [LIMIT liczba_wierszy]


--Listing 2.0
       
        DELETE
  [LOW_PRIORITY] [QUICK] [IGNORE]
  nazwa_tablicy[.*] [, nazwa_tablicy[.*] ...]
  FROM nazwy_tablic
  [WHERE definicje_skąd]


--Listing 3.0
       
        DELETE
  [LOW_PRIORITY] [QUICK] [IGNORE]
  FROM nazwa_tablicy[.*] [, nazwa_tablicy[.*] ...]
  USING nazwy_tablic
  [WHERE definicje_skąd]


--Listing 4.0

DELETE FROM jakas_tablica
WHERE user = 'kowalski'
ORDER BY timestamp
LIMIT 1;


--Listing 5.0: Poniższe polecenie używają trzech tablic do wyszukania odpowiednich danych ale powodują usunięcie danych tylko z tablic t1,t2.
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id;
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id;


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5134

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 37169
Komentarze użytkowników
Tego właśnie szukałem, miałem problem z usuwaniem danych z dwóch tabel, przy pomocy listingu 5.0 udało mi się to rozwiązać. Poniżej rozwiązanie mojego problemu. Dzięki
  • Zobacz kod dodany do tego wpisu
    • $zapytanie ="DELETE FROM pracownicy, users USING pracownicy, users WHERE pracownicy.control=".$check." AND users.control=".$check;
autor: alphatom79 | 12270 | 2011-02-04 09:38:48


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors