Tutorial Ini Menjelaskan Cara menggunakan Pernyataan DELETE MySQL untuk Menghapus Data dari Tabel atau Menghapus Seluruh Tabel & Perbedaan Antara Perintah Truncate & Delete
Di MySQL, DELETE adalah Bahasa Manipulasi Data atau DML, seperti yang kita tahu
Seperti namanya, perintah ini digunakan untuk menghapus baris dari tabel. Dengan menggunakan perintah ini, kita dapat menghapus satu atau lebih baris yang tidak diinginkan dalam satu transaksi. Ada beberapa cara untuk menghapus record dari tabel menggunakan perintah DELETE
Dalam tutorial ini, kita akan membahas semua ini secara detail bersama dengan contoh-contoh sederhana
=> Klik di sini untuk seri tutorial MySQL lengkap
Apa yang Akan Anda Pelajari
Perintah HAPUS MySQL
Ada faktor penting yang perlu diingat sebelum kita melanjutkan. Setiap baris atau beberapa baris yang kami hapus menggunakan perintah DELETE tidak akan pernah bisa diambil
Jadi, untuk menghindari skenario di mana sebuah baris dihapus secara tidak sengaja, disarankan untuk membuat cadangan tabel sebelum mengeksekusi pernyataan DELETE. Kami nantinya dapat menggunakan cadangan ini untuk memulihkan tabel jika terjadi kesalahan
Catatan. Kami menggunakan MySQL versi 8. 0. Anda dapat mengunduhnya dari sini.
Sintaks Hapus MySQL
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tablename[.*] [, tablename[.*]] [WHERE condition] [ORDER BY] [LIMIT row_count] ;Penjelasan Sintaks
- Sintaksnya dimulai dengan kata kunci "DELETE FROM", sehingga memberi tahu Server MySQL tentang jenis aktivitas yang akan dilakukan. Ini adalah kata kunci wajib dan tidak dapat dihilangkan
- Selanjutnya muncul nama tabel di mana operasi DELETE harus dilakukan. Ini juga wajib dan tidak bisa diabaikan. Kami dapat menyebutkan satu atau lebih dari satu nama tabel di sini
- Selanjutnya, kami dapat menyebutkan kondisi apa pun yang mengontrol kelayakan baris untuk dihapus. Ini adalah klausa opsional. Kata kunci di sini adalah DI MANA
- Diikuti oleh klausa WHERE adalah klausa ORDER BY, yang memaksa baris dihapus dalam urutan tertentu, baik naik atau turun, pada kolom. Ini adalah klausa opsional
- Klausa LIMIT mengikuti klausa ORDER BY. Ini membatasi jumlah baris yang dapat dihapus oleh pernyataan DELETE dari tabel
Pengubah Dalam Pernyataan DELETE
#1) RENDAH_PRIORITAS
Pengubah ini memberi tahu Mesin MySQL untuk menunda eksekusi pernyataan DELETE hingga saat tidak ada koneksi yang membaca dari tabel yang kami coba HAPUS dari
Ini membantu dalam mencapai konsistensi di semua operasi lain yang akan dilakukan di meja itu. Ini juga membantu menghindari masalah penguncian tabel
#2) CEPAT
Setiap kali kami menghapus baris, indeks yang sesuai juga akan dihapus. Mengklaim kembali ruang pada saat eksekusi pernyataan DELETE menghabiskan waktu prosesor. Jika kita menggunakan kata kunci QUICK, maka ruang indeks yang sesuai tetap tidak digunakan dan dapat digunakan saat record baru yang sesuai dengan rentang indeks yang telah dihapus sebelumnya dimasukkan.
Misalnya, pertimbangkan tabel karyawan di mana ID karyawan adalah indeksnya. Setiap kali seorang karyawan keluar dari organisasi, kami perlu menghapus catatan terkait. Jika kita menggunakan klausa QUICK maka ruang indeks yang sesuai akan tetap tidak digunakan
Ketika seorang karyawan baru bergabung, dia akan mendapatkan nomor karyawan baru dan bukan nomor yang sama dari orang yang keluar. Dalam contoh seperti itu, tidak disarankan untuk menggunakan QUICK
Contoh HAPUS MYSQL
Diberikan di bawah ini adalah tabel contoh yang dibuat di MYSQL
Nama Skema. Pasifik
Nama Tabel. karyawan
Nama Kolom
empNum. Memegang nilai integer untuk nomor karyawan
nama keluarga. Menyimpan nilai varchar untuk nama belakang karyawan
nama depan. Menyimpan nilai varchar untuk nama depan karyawan
surel. Menyimpan nilai varchar untuk ID email karyawan
deptNum. Memegang varchar untuk ID departemen milik karyawan
gaji. Memegang nilai desimal dari gaji setiap karyawan
mulai tanggal. Memegang nilai tanggal untuk tanggal bergabung karyawan
Nama Skema. Pasifik
Nama Tabel. karyawan_sejarah
Nama Kolom
empNum. Memegang nilai bilangan bulat untuk nomor karyawan
nama keluarga. Menyimpan nilai varchar untuk nama belakang karyawan
nama depan. Menyimpan nilai varchar untuk nama depan karyawan
surel. Menyimpan nilai varchar untuk ID email karyawan
deptNum. Memegang varchar untuk ID departemen milik karyawan
gaji. Memegang nilai desimal dari gaji setiap karyawan
mulai tanggal. Memegang nilai tanggal untuk tanggal bergabung karyawan
Nama Skema. Pasifik
Nama Tabel. departemen
Nama Kolom
deptNum. Memegang varchar untuk ID departemen dalam suatu organisasi
kota. Memegang nama kota tempat departemen bekerja
negara. Memegang nama negara yang sesuai dengan kota
bonus. Memegang nilai persentase dari bonus
MySQL Hapus Baris Tunggal
Cara pertama dan lebih mudah untuk menghapus rekaman dari tabel dalam menghapus rekaman satu per satu, menggunakan klausa WHERE yang sangat kuat yang memastikan hanya satu rekaman yang sesuai yang dihapus. Ini selanjutnya dapat digunakan untuk menghapus satu set baris yang serupa dari tabel
Mari kita telusuri pernyataan hapus dan pelaksanaannya secara mendetail
Di sini kami akan mencoba dan menghapus seorang karyawan bernama 'Chris Nolan' dengan nomor karyawan 1013
Seperti yang digambarkan pada gambar di atas, pernyataan DELETE telah berhasil dijalankan dan dihapus satu baris dari tabel karyawan
Pernyataan output di bawah ini menunjukkan waktu eksekusi pernyataan, pernyataan MySQL yang dijalankan, dan jumlah baris yang terpengaruh
Harap sangat yakin, tentang klausa WHERE di sini. Jika klausa WHERE salah atau jika Anda melewatkan klausa WHERE maka dapat mengakibatkan hilangnya data. Untuk menghindari situasi seperti itu, dalam produksi, ada praktik pencadangan atau pembongkaran data secara berkala
Untuk memverifikasi output dari pernyataan DELETE ini, mari jalankan pernyataan SELECT pada tabel ini dengan empNum sebagai 1013
Hasil output menunjukkan nilai NULL untuk semua kolom, menyiratkan bahwa tidak ada record untuk empNum tersebut. Keluaran dari kueri di bawah ini menunjukkan bahwa 0 baris telah dikembalikan, menyiratkan bahwa catatan telah dihapus oleh eksekusi pernyataan DELETE di atas
Pertanyaan
Cuplikan Tabel Setelah
empNumlastNamefirstNameemaildeptNumSalaryNULLNULLNULLNULLNULLNULL
MySQL DELETE Menggunakan Klausa ORDER BY Dan LIMIT
ORDER BY dan LIMIT adalah dua klausa yang telah kita bahas di atas. Yang pertama membantu dalam menentukan urutan di mana catatan harus dibersihkan, baik menghapus catatan dengan empNum naik atau menghapus catatan dengan gaji dalam urutan menurun. Yang terakhir membantu membatasi jumlah catatan yang dapat dihapus oleh transaksi ini
Sebagai contoh, jika kita ingin menghapus hanya 2 karyawan yang tergabung dalam dept nomor 4 yang merupakan penerima gaji tinggi. Lalu ada tiga bagian untuk kueri ini
- Pertama, kita perlu membersihkan karyawan dari dept nomor 4. Ini akan ditangani oleh klausa WHERE
- Selanjutnya, kita perlu membersihkan karyawan yang berpenghasilan tinggi. Ini akan ditangani oleh klausa ORDER BY pada kolom gaji dalam urutan menurun
- Terakhir, kita hanya perlu membersihkan dua karyawan. Ini akan ditangani oleh klausa LIMIT
Mari kita lihat kueri DELETE dan lihat hasilnya. Sebelum melakukannya, mari kita kenali terlebih dahulu catatan persis apa yang ingin kita hapus. Kami akan menggunakan kondisi di atas dengan pernyataan SELECT untuk mendapatkan catatan yang ingin kami hapus dan kemudian menjalankan kueri yang sama untuk memverifikasi apakah catatan tersebut telah dihapus atau tidak
Dalam kueri SELECT di atas, kami telah memenuhi ketiga kondisi yang kami bicarakan di atas menggunakan klausa WHERE, ORDER BY, dan LIMIT. Kueri memberi kami 2 catatan, satu dengan empNum 1010 dan satu lagi dengan 1007. Sekarang, kami akan menjalankan kueri DELETE untuk memastikan bahwa kedua catatan ini dihapus
Seperti yang digambarkan pada gambar di atas, pernyataan DELETE telah berhasil dijalankan dan menghapus dua baris dari tabel karyawan. Pernyataan output di bawah ini menunjukkan waktu eksekusi pernyataan, pernyataan MySQL yang dijalankan, dan jumlah baris yang terpengaruh
Untuk memverifikasi output dari pernyataan DELETE ini, mari jalankan SELECT untuk empNum 1010 dan 1007. Kami tidak dapat menggunakan kueri SELECT yang sama seperti yang digunakan di atas karena akan menampilkan karyawan lain di bawah deptNum 4
Hasil keluaran menunjukkan nilai NULL untuk semua kolom, menyiratkan bahwa tidak ada catatan untuk nomor karyawan tersebut. Keluaran dari kueri di bawah ini menunjukkan bahwa 0 baris telah dikembalikan, menyiratkan bahwa catatan telah dihapus oleh eksekusi pernyataan DELETE di atas
Pertanyaan
Cuplikan Tabel Setelah
empNumlastNamefirstNameemaildeptNumSalaryNULLNULLNULLNULLNULLNULL
MySQL DELETE Menggunakan Select Clause
Selanjutnya, kita akan membahas penggunaan klausa SELECT saat menghapus record dari satu tabel
Pertimbangkan skenario berikut
Kami memiliki dua set meja. karyawan dan departemen. deptNum seperti kunci utama di tabel departemen dan kunci asing di tabel karyawan. Ini berarti bahwa jika seorang karyawan ditugaskan ke suatu departemen maka itu harus dari salah satu departemen di tabel departemen
Sekarang, kita harus menghapus catatan tersebut dari tabel departemen di mana tidak ada karyawan yang ditugaskan sejauh ini. Kita dapat melakukan ini dengan memiliki klausa SELECT di sub-kueri kueri DELETE
Pertama-tama mari kita identifikasi catatan yang ingin kita hapus
Permintaan SELECT di atas memiliki subquery
Fungsi kueri adalah sebagai berikut
Kueri menarik semua catatan dari tabel departemen di mana deptNum tidak ada di tabel karyawan. Penggabungan dilakukan di sub-permintaan pada deptNum dari dua tabel
Sekarang mari kita jalankan kueri DELETE dan lihat apakah kita dapat menghapus kedua catatan ini dari tabel departemen karena tidak ada karyawan yang ditugaskan ke departemen ini
Seperti yang digambarkan pada gambar di atas, pernyataan hapus telah menghapus 2 baris dari tabel departemen yang tidak memiliki karyawan yang ditugaskan padanya
Untuk memverifikasi output dari pernyataan DELETE ini, mari jalankan SELECT di atas meja dan lihat apa yang kita miliki di output
Pesan keluaran dari kueri verifikasi di atas mengatakan "0 baris dikembalikan". Ini menyiratkan bahwa baris dengan deptNum 6 dan 7 dihapus. Outputnya juga tidak menunjukkan catatan alih-alih menampilkan nilai NULL karena catatan telah dihapus
Pertanyaan
MySQL HAPUS Seluruh Data Dari Tabel
Selanjutnya, kita akan melihat skenario dimana kita harus menghapus semua baris atau record dari sebuah tabel
Dalam situasi produksi, Anda mungkin tidak pernah menghadapi situasi seperti itu. Tetapi hal semacam ini akan diperlukan di area pengembangan di mana Anda harus menguji kode Anda dengan beberapa skenario berbeda dan Anda mungkin ingin membuat ulang kumpulan data uji baru dengan menghapus catatan yang ada di tabel
Pertama, mari kita lihat data yang ingin kita hapus. Kami akan mencoba menghapus data dari tabel employee_history
Diberikan di bawah ini adalah data yang ada saat ini dalam tabel
Di sini kita memiliki 18 baris dalam tabel employee_history. Sekarang mari kita lanjutkan dan hapus semua ini dalam satu transaksi. Permintaannya hampir mirip dengan yang kita bahas di bagian pertama. Satu-satunya perubahan adalah kita perlu menghapus klausa WHERE dari kueri sehingga tidak ada batasan jumlah baris yang ingin kita hapus
Seperti yang digambarkan pada gambar di atas, pernyataan delete telah berhasil dijalankan dan menghapus semua 18 baris dari tabel employee_history. Pernyataan output di bawah ini menunjukkan waktu eksekusi pernyataan, pernyataan MySQL yang dijalankan, dan jumlah baris yang terpengaruh
Untuk memverifikasi output dari pernyataan DELETE ini, mari jalankan SELECT di atas meja dan lihat apa yang kita miliki di output
Hasil keluaran menunjukkan nilai NULL untuk semua kolom, menyiratkan bahwa tidak ada catatan untuk nomor karyawan tersebut. Keluaran dari kueri di bawah ini menunjukkan bahwa 0 baris telah dikembalikan, menyiratkan bahwa semua catatan telah dihapus oleh eksekusi pernyataan DELETE di atas
Pertanyaan
Cuplikan Tabel Setelah
empNumlastNamefirstNameemaildeptNumSalaryNULLNULLNULLNULLNULLNULL
MySQL HAPUS Seluruh Tabel
Sekarang, kita akan melihat skenario dimana kita harus menghapus tabel itu sendiri. Dalam istilah SQL, kami menyebutnya DROP tabel. Tidak masalah apakah tabel memiliki data atau tidak. Itu hanya akan menjatuhkan tabel bersama dengan data jika ada
Di bagian atas, kami menghapus data dari tabel employee_history. Di bagian ini, kita akan membuang tabel employee_history itu sendiri
Berikut adalah perintah beserta outputnya
Seperti yang digambarkan pada gambar di atas, pernyataan DROP telah berhasil dijalankan dan menghapus tabel employee_history dari katalog sistem database MySQL
Jika Anda melihat pesannya, itu akan menampilkan "0 baris yang terpengaruh". Ini karena kami telah menghapus semua 18 baris di bagian sebelumnya. Jika tabel ini memiliki beberapa baris maka jumlah baris tersebut akan terpengaruh, yang berarti dihapus
Untuk memverifikasi output dari pernyataan DROP ini, mari jalankan SELECT di atas meja dan lihat apa yang kita miliki di output
Pesan keluaran dari kueri verifikasi di atas mengatakan bahwa tabel tidak ada. Ini memvalidasi eksekusi pernyataan DROP di atas untuk menghapus tabel
Pertanyaan
Perintah Potong MySQL
Kami telah membahas penghapusan semua record dari tabel menggunakan perintah DELETE. Hal yang sama dapat dicapai dengan menggunakan pernyataan TRUNCATE juga
Untuk contoh ini, mari buat ulang tabel employee_history dan isi ulang dengan data. Berikut ini adalah dua kueri yang telah dieksekusi untuk membuat ulang tabel dan mengisinya kembali
Pertanyaan
Ini adalah tampilan tabel employee_history sekarang dengan data
Selanjutnya, kami akan menghapus semua catatan dari tabel ini menggunakan pernyataan TRUNCATE
Seperti yang ditunjukkan pada gambar, kueri berhasil dijalankan. Jika Anda melihat lebih dekat pada bagian "Pesan", Anda akan menemukan bahwa itu mengatakan "0 baris terpengaruh". Namun, kita tahu bahwa tabel ini memiliki 15 baris di dalamnya. Lalu kenapa menunjukkan nol?
Alasan. Pernyataan truncate tidak peduli untuk menghitung berapa banyak baris yang terpengaruh oleh eksekusinya. Itu hanya mengosongkan meja. Ini adalah salah satu perbedaan signifikan antara pernyataan DELETE dan TRUNCATE
Mari verifikasi eksekusi pernyataan TRUNCATE dengan mengeksekusi kueri SELECT pada tabel employee_history
Seperti yang ditunjukkan pada gambar di atas, kueri tidak mengembalikan baris dan juga semua kolom menunjukkan nilai NULL, menyiratkan bahwa pernyataan TRUNCATE yang kami jalankan sebelumnya telah menghapus semua catatan dari tabel
Pertanyaan
Perbedaan Antara Pernyataan TRUNCATE Dan DELETE
Sr. NoDELETETRUNCATE1Ini adalah DML (Bahasa Manipulasi Data). Ini adalah DDL (Bahasa Definisi Data). 2Setiap pemicu AFTER DELETE di atas meja diaktifkan saat kita menggunakan perintah DELETE. Tidak ada pemicu SETELAH DELETE di atas meja yang diaktifkan saat kami menggunakan perintah TRUNCATE. Catatan 3A dapat dihapus bahkan jika ada batasan kunci asing. Rekaman dari tabel tidak dapat dipotong jika ada kendala kunci asing. Inisialisasi ulang 4Tabel tidak akan terjadi. Tabel akan diinisialisasi ulang. 5 WHERE klausa dapat digunakan. Klausa WHERE tidak dapat digunakan. 6Ini menghapus satu catatan pada satu waktu dan melacak jumlah total catatan yang dihapus dalam log. Itu membersihkan semua catatan sekaligus dan tidak melacak jumlah catatan yang dihapus. 7 Ini relatif lebih lambat daripada TRUNCATE, jika dibandingkan untuk menghapus seluruh data dari tabel. Ini relatif lebih cepat daripada DELETE, jika dibandingkan dengan menghapus seluruh data dari tabel
Integritas Referensi Dan Dampaknya Pada DELETE
Sebelum kita, mari kita lihat apa itu Integritas referensial atau RI atau Batasan Kunci Asing?
Batasan Kunci Asing adalah tentang membangun hubungan atau keterkaitan antara tabel induk dan anak. Ini membantu dalam referensi silang data di seluruh tabel yang ditautkan satu sama lain. Satu tabel induk dapat memiliki beberapa tabel anak dan sebaliknya
Misalnya, dua tabel yang telah kita diskusikan selama ini i. e. karyawan dan departemen, dihubungkan satu sama lain menggunakan batasan Foreign Key. Batasan ini dibuat dengan membuat satu kolom, biasanya primary key, sebagai kolom kunci yang menghubungkan dua tabel
Kolom deptNum di tabel departemen telah ditautkan ke kolom deptNum di tabel karyawan. Dalam hal ini, departemen adalah tabel induk dan karyawan adalah tabel anak
Namun, bagaimana pengaruhnya terhadap pernyataan DELETE?
Di MySQL atau di database apa pun, ada skenario tertentu yang harus ditangani saat menghapus catatan dari tabel induk atau anak
Ada beberapa pilihan referensi yang bisa kita diskusikan
#1) PADA HAPUS CASCADE. Aturan mengatakan bahwa kami tidak dapat menghapus baris dari tabel induk jika memiliki referensi atau memiliki baris yang sesuai di salah satu tabel anak. Namun, jika tabel induk memiliki beberapa tabel anak, maka merupakan tugas yang membosankan untuk terlebih dahulu menghapus record dari setiap tabel anak dan kemudian dari tabel induk.
Untuk ini, ada solusi yang disebut, ON DELETE CASCADE. Ini adalah salah satu klausa yang ditambahkan ke pernyataan CREATE dari masing-masing tabel anak. Jadi, setiap kali kita mengatakan menghapus sebuah baris dari tabel induk, maka mesin MySQL pertama-tama akan mengidentifikasi referensi dari baris tersebut di tabel anak dan menghapus catatan tersebut dan akhirnya akan menghapus catatan dari tabel induk.
#2) TANPA TINDAKAN. Ini adalah opsi default. Jika eksekusi pernyataan DELETE mencoba menghapus catatan yang memiliki referensi di salah satu tabel anak, maka dengan opsi ini eksekusi pernyataan akan berhenti dan transaksi MySQL akan dikembalikan ke titik komit terakhir
#3) BATAS. Fungsi RESTRICT dan NO ACTION adalah sama. Ini akan menghentikan eksekusi dan mengeluarkan rollback
#4) SET NULL. Jika eksekusi pernyataan hapus mencoba untuk menghapus catatan yang memiliki referensi di salah satu tabel anak, maka opsi ini akan memperbarui nilai kolom di semua tabel anak sebagai NULL dan setelah selesai, ini akan menghapus catatan dari induknya
#5) SET DEFAULT. Jika eksekusi pernyataan DELETE mencoba menghapus catatan yang memiliki referensi di salah satu tabel anak, maka opsi ini akan memperbarui nilai kolom ke nilai default seperti yang ditentukan dalam pernyataan CREATE dari tabel
Pertanyaan dan Jawaban yang Sering Diajukan
T #1) Bagaimana Cara Menghapus Data dari Tabel di MySQL?
Menjawab. Sintaks perintah hapus untuk menghapus hanya baris data yang dipilih diberikan di bawah ini
DELETE FROM table_name WHERE condition;_T #2) Bagaimana cara menghapus semua Data dari Tabel di MySQL?
Menjawab. Sintaks perintah DELETE untuk menghapus semua baris dari tabel adalah
DELETE * FROM table_name; _T #3) Bagaimana Cara Menghapus Tabel dari Database di MySQL?
Menjawab. Perintah drop dapat digunakan untuk menghapus tabel dari database. Pengguna dapat mengganti table_name dengan tabel yang perlu dihapus
DELETE FROM employees WHERE empNum = 1013 ; _0T #4) Bagaimana Cara Menghapus Basis Data di MySQL?
Menjawab. Perintah drop dapat digunakan untuk menghapus database
DELETE FROM employees WHERE empNum = 1013 ; _1Pengguna dapat mengganti db_name dengan nama database yang perlu dihapus
T #5) Apa itu ON DELETE CASCADE di MySQL?
Menjawab. Saat catatan induk dihapus, ON DELETE CASCADE membuat catatan anak yang cocok untuk dihapus. Dengan demikian, efek penghapusan mengalir dari orang tua ke anak. Ini dapat berguna dalam melakukan penghapusan multi-tabel
T #6) Mengapa TRUNCATE dianggap sebagai pernyataan DDL?
Menjawab. Pernyataan TRUNCATE benar-benar menjatuhkan dan membuat ulang tabel bersama dengan metadata tabel. Jadi, ini adalah pernyataan DDL
T #7) Bisakah TRUNCATE dibatalkan?
Menjawab. Tidak, TRUNCATE adalah pernyataan komitmen otomatis jika dijalankan secara mandiri. Ini berarti bahwa itu tidak dapat dibatalkan karena komit juga dieksekusi bersamanya. Tetapi jika itu adalah bagian dari transaksi, maka itu dapat dibatalkan menggunakan File Log SQL
T #8) Apakah pernyataan DELETE dapat dibatalkan?
Menjawab. Ya, pernyataan DELETE dapat dibatalkan. Cukup jalankan perintah ROLLBACK sebelum menjalankan COMMIT
T #9) Bisakah kolom dihapus menggunakan perintah DELETE?
Menjawab. Penambahan atau penghapusan kolom adalah perintah DDL. Pernyataan ALTER harus digunakan untuk DROP kolom dari tabel