Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Memahami MySQL TRUNCATE TABLE dengan Contoh Praktis

Pernyataan MySQL TRUNCATE TABLE adalah pernyataan DDL yang digunakan untuk menghapus semua record dari tabel MySQL. Saat kita menjalankan perintah ini, perintah ini akan menghapus tabel yang ada terlebih dahulu dan kemudian membuat tabel baru menggunakan definisi tabel. Urutan eksekusi query dari perintah TRUNCATE TABLE adalah DROP TABLE dan CREATE TABLE.

Ciri-ciri pernyataan TRUNCATE TABLE adalah sebagai berikut:

  1. Saat kita menjalankan pernyataan TRUNCATE TABLE alih-alih menghapus baris, MySQL menjatuhkan tabel dan membuatnya kembali. Ini lebih cepat daripada pernyataan DELETE, terutama untuk tabel besar.
  2. TRUNCATE TABLE mengabaikan pemicu DELETE untuk mencapai performa tinggi.
  3. TRUNCATE TABLE tidak dapat dibatalkan karena menyebabkan komit implisit.
  4. Jika Anda menggunakan mesin penyimpanan atomik yang didukung DDL, dan server berhenti selama operasi TRUNCATE TABLE, transaksi akan dilakukan sepenuhnya atau dibatalkan.
  5. Ini menyetel ulang nilai kolom AUTO_INCREAMENT ke nilai awal.
  6. Pernyataan TRUNCATE TABLE gagal jika Anda telah membuat kunci asing pada tabel InnoDB atau NDB.
  7. Meskipun tabel atau indeks rusak, dan definisi tabel valid, pernyataan TRUNCATE TABLE membuat ulang tabel kosong.
  8. Pernyataan TRUNCATE TABLE mempertahankan partisi. File indeks dan data akan dihapus, tetapi definisi partisi tidak akan terpengaruh.
  9. Anda dapat memotong tabel InnoDB yang rusak.
  10. Jika Anda menggunakan tablespace file-per-table, pernyataan TRUNCATE TABLE menghapus tablespace dan membuat yang baru.
  11. Kita dapat menggunakan TRUNCATE TABLE dalam tabel ringkasan skema kinerja, tetapi tidak menghapus data tabel. Ini mengatur ulang nilai kolom ringkasan ke NULL atau Nol (0).

Perbedaan antara Pernyataan Tabel DELETE dan TRUNCATE

Sr. HAPUS Pernyataan Pernyataan TRUNCATE TABLE
1 Pernyataan DELETE adalah pernyataan DML. Perubahan dicatat ke log biner database. Pernyataan TRUNCATE TABLE adalah Pernyataan DDL. Operasi tidak dicatat dalam log biner.
2 Operasi dapat dibatalkan. Operasi ini tidak dapat dibatalkan.
3 Ini lebih lambat karena perubahan dicatat ke log biner, pemicu DML dijalankan. Ini lebih cepat karena menghapus tabel yang ada dan membuat tabel baru.
4 Pernyataan DELETE memperoleh kunci tingkat baris. TRUNCATE TABLE mengunci halaman data sebelum menghapus data.
5 Anda dapat menghapus catatan tertentu dengan menggunakan klausa WHERE Truncate table menghapus semua data dari tabel.

Menggunakan Pernyataan TRUNCATE TABLE dalam Praktik

Sintaks dari pernyataan Truncate Table adalah sebagai berikut:

TRUNCATE TABLE [DatabaseName].[TABLE_NAME]

Catatan:Nama tabel tempat Anda ingin menghapus catatan adalah setelah TRUNCATE TABLE penyataan. Misalkan Anda ingin memotong tblStudent meja. Kueri harus sebagai berikut:

TRUNCATE TABLE tblStudent

Untuk demonstrasi, saya telah menginstal MySQL 8.0 Server dan membuat database bernama studentsDB . Di sana, saya telah membuat tabel bernama tblStudent , tblSchool, dan tblStudentCounsiler.

Script berikut membuat database dan tabel:

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;

Saya telah membuat kunci asing di tblStudent tabel yang mereferensikan SchoolID kolom tblStudent tabel.

Script untuk membuat kunci asing adalah sebagai berikut:

ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;

Diagram ER di bawah ini:

Skrip berikut menyisipkan data yang dijumlahkan di semua 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');

Sekarang mari kita memahami kasus penggunaan.

Pertama, mari kita potong tblStudentCounsiler dengan pertanyaan berikut:

mysql> truncate table studentdb.tblStudentCounsiler;

Keluaran :

Query OK, 0 rows affected (0.08 sec)

Jalankan pernyataan SELECT untuk melihat data:

mysql> select * from studentdb.tblStudentCounsiler;

Keluaran kueri:

Empty set (0.01 sec)

Seperti yang Anda lihat pada tangkapan layar di atas, perintah berhasil dijalankan.

Sekarang, mari kita coba memotong tblSchool tabel dengan kueri berikut:

mysql> Truncate table tblSchool;

Kesalahan berikut terjadi karena kami tidak dapat memotong tabel yang direferensikan oleh tabel lain:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)

Untuk memperbaiki kesalahan ini, kita harus menjatuhkan kunci asing. Jalankan kueri berikut untuk melakukannya:

mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;

Keluaran Kueri:

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Setelah kunci asing dijatuhkan, jalankan perintah tabel truncate:

mysql> Truncate table tblSchool;

Keluaran Kueri:

Query OK, 0 rows affected (0.08 sec)

Ringkasan

Artikel saat ini memperkenalkan pernyataan TRUNCATE TABLE dan karakteristiknya. Kami mengenal perbedaan antara TRUNCATE TABLE dan perintah DELETE, serta menjelajahi beberapa contoh praktis untuk memperjelas konsep.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengonversi tanggal di MySQL dari bidang string

  2. Server MySQL kehabisan memori atau tidak dapat dijalankan

  3. Cara Membuat Database MySQL Menggunakan cPanel API

  4. Cara Bekerja dengan Subquery MySQL

  5. Panduan Merancang Database Untuk RBAC Di MySQL