MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement (Polski)

13.1.37 TRUNCATE TABLE Statement

TRUNCATE tbl_name

TRUNCATE TABLE empties a table completely. It requires the DROP privilege. Logically, TRUNCATE TABLE is similar to a DELETE statement that deletes all rows, or a sequence of DROP TABLE and CREATE TABLE statements.,

aby osiągnąć wysoką wydajność,TRUNCATE TABLE omija metodę usuwania danych DML. Tak więc ,nie powodujeON DELETE wyzwalania do odpalenia, nie może być wykonywana dlaInnoDB tabel z relacjami klucz obcy rodzic-dziecko i nie może być cofnięta jak operacja DML. JednakTRUNCATE TABLE operacje na tabelach, które używają atomowego mechanizmu pamięci masowej obsługiwanego przez DDL, są albo w pełni zaangażowane, albo wycofywane, jeśli serwer zatrzyma się podczas ich działania. Więcej informacji, patrz punkt 13.1.,1, „Atomic Data Definition Statement Support”.

chociażTRUNCATE TABLE jest podobny doDELETE, jest klasyfikowany jako deklaracja DDL, a nie deklaracja DML. Różni się od DELETEw następujący sposób:

  • operacje obcinania upuść i ponownie utwórz tabelę, co jest znacznie szybsze niż usuwanie wierszy jeden po drugim, szczególnie w przypadku dużych tabel.

  • operacje obcinania powodują niejawny commit, więc nie można go cofnąć. Patrz Punkt 13. 3.,3, „oświadczenia, które powodują Ukryte Commit”.

  • operacje obcinania nie mogą być wykonywane, jeśli sesja posiada aktywną blokadę tabeli.

  • TRUNCATE TABLE nie powiodło się dlaInnoDB tabeli lubNDB tabeli, jeśli istnieją jakiekolwiek ograniczeniaFOREIGN KEY z innych tabel odwołujących się do tabeli. Dozwolone są ograniczenia klucza obcego między kolumnami tej samej tabeli.

  • operacje obcinania nie zwracają znaczącej wartości dla liczby usuniętych wierszy., Zwykle wynikiem jest „0 wierszy, których dotyczy problem”, co należy interpretować jako ” brak informacji.”

  • tak długo, jak definicja tabeli jest poprawna, tabela może być ponownie utworzona jako pusta z TRUNCATE TABLE, nawet jeśli dane lub pliki indeksów zostały uszkodzone.

  • każdaAUTO_INCREMENT wartość jest resetowana do wartości początkowej. Jest to prawdą nawet dla MyISAMI InnoDB, które normalnie nie używają ponownie wartości sekwencji.,

  • w przypadku użycia z partycjonowanymi tabelami, TRUNCATE TABLE zachowuje partycjonowanie; to znaczy, Pliki Danych i indeksów są upuszczane i ponownie tworzone, podczas gdy definicje partycji nie mają wpływu.

  • TRUNCATE TABLE instrukcja nie wywołujeON DELETE wyzwalaczy.

  • Obcinanie uszkodzonej tabeliInnoDB jest obsługiwane.

TRUNCATE TABLE dla tabeli zamyka wszystkie procedury obsługi tabeli, które zostały otwarte za pomocąHANDLER OPEN.,

TRUNCATE TABLE jest traktowany do celów logowania binarnego i replikacji jakoDROP TABLE, a następnieCREATE TABLE—czyli jako DDL, a nie DML. Wynika to z faktu, że podczas korzystania z InnoDB I innych mechanizmów pamięci transakcyjnej, w których poziom izolacji transakcji nie pozwala na rejestrowanie na podstawie instrukcji (READ COMMITTED lub READ UNCOMMITTED), instrukcja nie była rejestrowana i replikowana podczas korzystania z STATEMENT lub MIXED tryb logowania., (Błąd #36763) jednak nadal jest on stosowany na replikach przy użyciu InnoDB w opisany wcześniej sposób.

w MySQL 5.7 i starszych, w systemie z dużą pulą buforów iinnodb_adaptive_hash_index włączona, operacjaTRUNCATE TABLE może spowodować tymczasowy spadek wydajności systemu z powodu skanowania LRU, które wystąpiło podczas usuwania wpisów adaptive hash index w tabeli (błąd #68184). Zmiana mapowania TRUNCATE TABLEna DROP TABLEI CREATE TABLE w MySQL 8.0 pozwala uniknąć problematycznego skanowania LRU.,

TRUNCATE TABLEmoże być używany z tabelami podsumowania schematu wydajności, ale efektem jest Resetowanie kolumn podsumowania do 0 lubNULL, a nie usuwanie wierszy. Zob. Sekcja 27.12.18, „Tabele Podsumowujące Schematy Wydajności”.

Obcinanie tabeliInnoDB, która znajduje się w tabeli file-per-table, powoduje usunięcie istniejącej tabeli i utworzenie nowej. Od MySQL 8.0.,21, jeśli przestrzeń tablespace została utworzona z wcześniejszą wersją I znajduje się w nieznanym katalogu, InnoDB tworzy nową przestrzeń tablespace w domyślnej lokalizacji i zapisuje następujące ostrzeżenie do dziennika błędów: lokalizacja katalogu DATA musi znajdować się w znanym katalogu. Lokalizacja katalogu danych zostanie zignorowana, a plik zostanie umieszczony w domyślnej lokalizacji datadir. Znane katalogi to te zdefiniowane przezdatadir,innodb_data_home_dir orazinnodb_directories zmienne., AbyTRUNCATE TABLE utworzyć przestrzeń tabel w bieżącej lokalizacji, Dodaj katalog do Ustawieniainnodb_directories przed uruchomieniemTRUNCATE TABLE.

Share

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *