Instrukcja MySQL TRUNCATE TABLE to instrukcja DDL służąca do usuwania wszystkich rekordów z tabeli MySQL. Kiedy uruchamiamy to polecenie, najpierw usuwa istniejącą tabelę, a następnie tworzy nową tabelę przy użyciu definicji tabeli. Sekwencja wykonania zapytania polecenia TRUNCATE TABLE to DROP TABLE i CREATE TABLE.
Charakterystyka instrukcji TRUNCATE TABLE jest następująca:
- Kiedy zamiast usuwać wiersze uruchamiamy instrukcję TRUNCATE TABLE, MySQL usuwa tabelę i tworzy ją ponownie. Jest szybszy niż instrukcja DELETE, szczególnie w przypadku dużych tabel.
- TRUNCATE TABLE omija wyzwalacze DELETE w celu osiągnięcia wysokiej wydajności.
- Nie można wycofać tabeli TRUNCATE TABLE, ponieważ powoduje to niejawne zatwierdzenie.
- Jeśli używasz atomowych silników pamięci masowej obsługiwanych przez DDL, a serwer zatrzymuje się podczas operacji TRUNCATE TABLE, transakcje zostaną w pełni zatwierdzone lub wycofane.
- Resetuje wartości kolumn AUTO_INCREAMENT do wartości początkowej.
- Instrukcja TRUNCATE TABLE nie powiedzie się, jeśli utworzyłeś klucze obce w tabelach InnoDB lub NDB.
- Nawet jeśli tabela lub indeks są uszkodzone, a definicja tabeli jest prawidłowa, instrukcja TRUNCATE TABLE odtwarza pustą tabelę.
- Instrukcja TRUNCATE TABLE zachowuje partycjonowanie. Pliki indeksu i dane zostaną usunięte, ale definicja partycji nie zostanie naruszona.
- Możesz obciąć uszkodzoną tabelę InnoDB.
- Jeśli używasz obszaru tabel plik na tabelę, instrukcja TRUNCATE TABLE porzuca obszar tabel i tworzy nowy.
- Możemy użyć TRUNCATE TABLE w tabelach podsumowań schematu wydajności, ale nie powoduje to usunięcia danych z tabel. Resetuje wartości kolumny podsumowania do wartości NULL lub Zero (0).
Różnice między instrukcjami tabeli DELETE i TRUNCATE
Sr. | DELETE oświadczenie | Oświadczenie TRUNCATE TABLE |
1 | Oświadczenie DELETE jest instrukcją DML. Zmiany są rejestrowane w binarnych dziennikach bazy danych. | Instrukcja TRUNCATE TABLE jest instrukcją DDL. Operacja nie jest rejestrowana w dziennikach binarnych. |
2 | Operację można cofnąć. | Tej operacji nie można cofnąć. |
3 | Jest wolniejszy, ponieważ zmiany są rejestrowane w dziennikach binarnych, wyzwalacze DML są wykonywane. | Jest szybszy, ponieważ usuwa istniejącą tabelę i tworzy nową. |
4 | Oświadczenie DELETE przejmuje blokadę na poziomie wiersza. | TRUNCATE TABLE blokuje strony danych przed ich usunięciem. |
5 | Możesz usunąć określone rekordy, używając klauzuli WHERE | Obetnij tabelę usuwa wszystkie dane z tabeli. |
Używanie instrukcji TRUNCATE TABLE w praktyce
Składnia instrukcji Truncate Table jest następująca:
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]
Uwaga:nazwa tabeli, z której chcesz usunąć rekord, znajduje się po TRUNCATE TABLE oświadczenie. Załóżmy, że chcesz skrócić tblStudent stół. Zapytanie powinno wyglądać następująco:
TRUNCATE TABLE tblStudent
Na potrzeby demonstracji zainstalowałem MySQL 8.0 Server i stworzyłem bazę danych o nazwie studentsDB . Tam stworzyłem tabele o nazwie tblStudent , tblSchool, i tblStudentCounsiler.
Poniższy skrypt tworzy bazę danych i tabele:
Create database studentDB;
CREATE TABLE studentDB.tblstudent (
studentID integer NOT NULL AUTO_INCREMENT,
StudentName varchar(255) DEFAULT NULL,
StudentGrade char(1) DEFAULT NULL,
SchoolID int,
PRIMARY KEY (studentID)
)
ENGINE = INNODB;
CREATE TABLE studentDB.tblschool (
SchoolID int NOT NULL AUTO_INCREMENT,
SchoolName varchar(255) DEFAULT '',
City varchar(255) DEFAULT '',
PRIMARY KEY (SchoolID)
)
ENGINE = INNODB;
CREATE TABLE studentDB.tblStudentCounsiler (
CounsilerID int NOT NULL AUTO_INCREMENT,
CounsilerName varchar(255) DEFAULT '',
PRIMARY KEY (CounsilerID)
)
ENGINE = INNODB;
Utworzyłem klucz obcy w tabeli Student tabela odwołująca się do Identyfikatora Szkoły kolumna tblStudent tabela.
Skrypt do tworzenia klucza obcego jest następujący:
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;
Schemat ER znajduje się poniżej:
Poniższy skrypt wstawia zsumowane dane do wszystkich tabel:
Use studentDB;
insert INTO tblSchool(SchoolName,City) VALUES ('Nalanda School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Sarvajanik School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Diwan Ballubhai','Ahmedabad');
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nisarg Upadhyay','A',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nirali Upadhyay','A',2);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Manushi Upadhyay','C',3);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Dixit Upadhyay','B',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Bharti Upadhyay','A',1);
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Raghav Dave');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Keyur Dalwadi');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Sawan Panchal');
Teraz pozwól nam zrozumieć przypadki użycia.
Najpierw skróćmy tblStudentCounsiler z następującym zapytaniem:
mysql> truncate table studentdb.tblStudentCounsiler;
Wynik :
Query OK, 0 rows affected (0.08 sec)
Uruchom instrukcję SELECT, aby wyświetlić dane:
mysql> select * from studentdb.tblStudentCounsiler;
Wyjście zapytania:
Empty set (0.01 sec)
Jak widać na powyższym zrzucie ekranu, polecenie zostało wykonane pomyślnie.
Spróbujmy teraz skrócić tblSchool tabela z następującym zapytaniem:
mysql> Truncate table tblSchool;
Pojawia się następujący błąd, ponieważ nie możemy skrócić tabeli, do której odwołuje się inna tabela:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)
Aby naprawić ten błąd, musimy usunąć klucz obcy. Uruchom następujące zapytanie, aby to zrobić:
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;
Wyjście zapytania:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
Po upuszczeniu klucza obcego uruchom polecenie obcinania tabeli:
mysql> Truncate table tblSchool;
Wyjście zapytania:
Query OK, 0 rows affected (0.08 sec)
Podsumowanie
W bieżącym artykule przedstawiono instrukcję TRUNCATE TABLE i jej charakterystykę. Zapoznaliśmy się z różnicami między poleceniami TRUNCATE TABLE i DELETE, a także zbadaliśmy kilka praktycznych przykładów w celu wyjaśnienia pojęć.