Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrozumienie MySQL TRUNCATE TABLE na praktycznych przykładach

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:

  1. 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.
  2. TRUNCATE TABLE omija wyzwalacze DELETE w celu osiągnięcia wysokiej wydajności.
  3. Nie można wycofać tabeli TRUNCATE TABLE, ponieważ powoduje to niejawne zatwierdzenie.
  4. 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.
  5. Resetuje wartości kolumn AUTO_INCREAMENT do wartości początkowej.
  6. Instrukcja TRUNCATE TABLE nie powiedzie się, jeśli utworzyłeś klucze obce w tabelach InnoDB lub NDB.
  7. Nawet jeśli tabela lub indeks są uszkodzone, a definicja tabeli jest prawidłowa, instrukcja TRUNCATE TABLE odtwarza pustą tabelę.
  8. Instrukcja TRUNCATE TABLE zachowuje partycjonowanie. Pliki indeksu i dane zostaną usunięte, ale definicja partycji nie zostanie naruszona.
  9. Możesz obciąć uszkodzoną tabelę InnoDB.
  10. Jeśli używasz obszaru tabel plik na tabelę, instrukcja TRUNCATE TABLE porzuca obszar tabel i tworzy nowy.
  11. 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ęć.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odpowiednik GROUP_CONCAT w Django

  2. Jak wygenerować skrypt z diagramu w środowisku MySQL Workbench

  3. Błąd 1046 Nie wybrano bazy danych, jak rozwiązać?

  4. Korzystanie z różnych silników pamięci masowej MySQL w projektowaniu baz danych

  5. Wprowadzenie do poleceń SQL