Cara menghapus baris di mysql dengan kunci asing

Kami dapat menghapus batasan FOREIGN KEY dari kolom tabel yang ada dengan menggunakan kata kunci DROP bersama dengan pernyataan ALTER TABLE

Sintaksis

ALTER TABLE table_name DROP FOREIGN KEY constraint_name

Di sini nama batasan adalah nama batasan kunci asing yang kami terapkan saat membuat tabel. Jika tidak ada nama kendala yang ditentukan maka MySQL akan memberikan nama kendala yang dapat diperiksa dengan pernyataan SHOW CREATE TABLE

Klausa ON DELETE CASCADE di MySQL digunakan untuk secara otomatis menghapus catatan yang cocok dari tabel anak ketika kita menghapus baris dari tabel induk. Ini adalah semacam tindakan referensial yang terkait dengan kunci asing

Misalkan kita telah membuat dua tabel dengan FOREIGN KEY dalam hubungan kunci asing, menjadikan kedua tabel sebagai parent dan child. Selanjutnya, kita mendefinisikan klausa ON DELETE CASCADE untuk satu FOREIGN KEY yang harus diatur agar yang lain berhasil dalam operasi cascading. Jika ON DELETE CASCADE didefinisikan untuk satu klausa FOREIGN KEY saja, maka operasi cascading akan menimbulkan kesalahan

Contoh MySQL ON DELETE CASCADE

Mari kita pahami bagaimana kita bisa menggunakan klausa ON DELETE CASCADE di tabel MySQL. Pertama, kita akan membuat dua tabel bernama Karyawan dan Pembayaran. Kedua tabel terkait melalui kunci asing dengan operasi cascade on delete. Di sini, Employee adalah tabel induk, dan Payment adalah tabel anak. Skrip berikut membuat kedua tabel beserta rekamannya

Meja. Karyawan

Pernyataan berikut membuat tabel Karyawan

Selanjutnya, jalankan query insert untuk mengisi record

Jalankan kueri SELECT untuk memverifikasi data ke dalam tabel, yang dapat ditampilkan di bawah ini

Cara menghapus baris di mysql dengan kunci asing

Meja. Pembayaran

Pernyataan di bawah ini membuat tabel Pembayaran

Selanjutnya, jalankan pernyataan insert untuk mengisi record ke dalam tabel

Jalankan kueri SELECT untuk memverifikasi data ke dalam tabel, yang dapat ditampilkan di bawah ini

Cara menghapus baris di mysql dengan kunci asing

Mari kita hapus data dari tabel induk Karyawan. Untuk melakukannya, jalankan pernyataan berikut

Pernyataan di atas akan menghapus catatan karyawan yang emp_id = 102 dan mereferensikan data ke dalam tabel anak. Kami dapat memverifikasi data menggunakan pernyataan SELECT yang akan memberikan output berikut

Cara menghapus baris di mysql dengan kunci asing

Pada output di atas, kita dapat melihat bahwa semua baris yang merujuk ke emp_id = 102 secara otomatis dihapus dari kedua tabel

Bagaimana menemukan tabel yang terpengaruh oleh tindakan ON DELETE CASCADE?

Terkadang, sebelum menghapus rekaman dari tabel, kami ingin mengetahui tabel yang terpengaruh oleh tindakan referensial ON DELETE CASCADE. Kami dapat menemukan informasi ini dengan melakukan kueri dari reference_constraints di database information_schema sebagai berikut

Pernyataan di bawah ini menghasilkan hasil tentang tabel yang terkait dengan tabel Karyawan dengan aturan ON DELETE CASCADE di database employeedb

Setelah menjalankan perintah di atas, kita akan mendapatkan output di bawah ini

Cara menghapus baris di mysql dengan kunci asing

MySQL ON UPDATE CASCADE

Klausa ON UPDATE CASCADE di MySQL digunakan untuk memperbarui catatan yang cocok dari tabel anak secara otomatis ketika kami memperbarui baris di tabel induk. Contoh berikut menjelaskannya dengan lebih jelas

Pertama, kita perlu menggunakan pernyataan ALTER TABLE untuk menambahkan klausa ON UPDATE CASCADE di tabel Pembayaran seperti di bawah ini

Ini akan memberikan output berikut

Cara menghapus baris di mysql dengan kunci asing

Dalam skrip di bawah ini, kami akan memperbarui id karyawan di Tabel Induk, dan secara otomatis akan mencerminkan perubahan ini di tabel anak juga

Memverifikasi isi tabel Karyawan dan Pembayaran, kita akan melihat bahwa nilai kolom emp_id akan berhasil diperbarui

Jika tabel memiliki kunci utama tetapi tidak ada tanggungan, atau jika tabel hanya memiliki kunci asing tetapi tidak ada kunci utama, pernyataan DELETE beroperasi dengan cara yang sama seperti pada tabel tanpa batasan referensial. Jika sebuah tabel memiliki kunci utama dan tabel dependen, pernyataan DELETE beroperasi sesuai dengan aturan hapus yang ditentukan untuk tabel tersebut

Semua aturan penghapusan dari semua hubungan yang terpengaruh harus dipenuhi agar operasi penghapusan berhasil. Jika batasan referensial dilanggar, operasi DELETE akan gagal

Tindakan yang akan diambil pada tabel dependen saat DELETE dilakukan pada tabel induk bergantung pada aturan hapus yang ditentukan untuk batasan referensial. Jika tidak ada aturan hapus yang ditentukan, aturan DELETE NO ACTION akan digunakan

DELETE NO ACTIONMenentukan bahwa baris dalam tabel induk dapat dihapus jika tidak ada baris lain yang bergantung padanya. Jika ada baris dependen dalam hubungan, DELETE gagal. Pengecekan baris dependen dilakukan di akhir pernyataan. DELETE RESTRICT Menentukan bahwa baris dalam tabel induk dapat dihapus jika tidak ada baris lain yang bergantung padanya. Jika ada baris dependen dalam hubungan, DELETE gagal. Pemeriksaan baris dependen dilakukan segera

Misalnya, Anda tidak dapat menghapus departemen dari tabel departemen jika masih bertanggung jawab atas beberapa proyek yang dijelaskan oleh baris dependen dalam tabel proyek

DELETE CASCADESmenetapkan bahwa pertama-tama baris yang ditunjuk dalam tabel induk akan dihapus. Kemudian, baris dependen dihapus

Misalnya, Anda dapat menghapus departemen dengan menghapus barisnya di tabel departemen. Menghapus baris dari tabel departemen juga menghapus

  • Baris untuk semua departemen yang melapor padanya
  • Semua departemen yang melapor ke departemen tersebut dan seterusnya
DELETE SET NULLSMenetapkan bahwa setiap kolom nullable dari kunci asing di setiap baris dependen diatur ke nilai defaultnya. Ini berarti bahwa kolom hanya disetel ke nilai defaultnya jika merupakan anggota dari kunci asing yang mereferensikan baris yang sedang dihapus. Hanya baris dependen yang merupakan turunan langsung yang terpengaruh. DELETE SET DEFAULTSMenetapkan bahwa setiap kolom kunci asing di setiap baris dependen diatur ke nilai defaultnya. Ini berarti bahwa kolom hanya disetel ke nilai defaultnya jika merupakan anggota dari kunci asing yang mereferensikan baris yang sedang dihapus. Hanya baris dependen yang merupakan turunan langsung yang terpengaruh

Misalnya, Anda dapat menghapus karyawan dari tabel karyawan (EMPLOYEE) meskipun karyawan tersebut mengelola beberapa departemen. Dalam hal ini, nilai MGRNO untuk setiap karyawan yang melapor ke manajer dikosongkan di tabel departemen (DEPARTMENT). Jika beberapa nilai default lainnya ditentukan pada pembuatan tabel, nilai tersebut akan digunakan

Ini karena batasan REPORTS_TO_EXISTS yang ditentukan untuk tabel departemen

Jika tabel turunan memiliki aturan hapus RESTRICT atau NO ACTION dan baris ditemukan sehingga baris turunan tidak dapat dihapus, seluruh DELETE gagal

Saat menjalankan pernyataan ini dengan sebuah program, jumlah baris yang dihapus dikembalikan dalam SQLERRD(3) di SQLCA. Angka ini hanya mencakup jumlah baris yang dihapus dalam tabel yang ditentukan dalam pernyataan DELETE. Itu tidak termasuk baris yang dihapus menurut aturan CASCADE. SQLERRD(5) di SQLCA berisi jumlah baris yang dipengaruhi oleh batasan referensial di semua tabel. Nilai SQLERRD(3) juga tersedia dari item ROW_COUNT dalam pernyataan GET DIAGNOSTICS. Nilai SQLERRD(5) tersedia dari item DB2_ROW_COUNT_SECONDARY

Perbedaan halus antara aturan RESTRICT dan NO ACTION paling mudah dilihat saat melihat interaksi pemicu dan batasan referensial. Pemicu dapat didefinisikan untuk diaktifkan baik sebelum atau sesudah operasi (pernyataan DELETE, dalam hal ini). A sebelum pemicu diaktifkan sebelum DELETE dilakukan dan oleh karena itu sebelum pemeriksaan batasan apa pun. Pemicu setelah diaktifkan setelah DELETE dilakukan, dan setelah aturan batasan RESTRICT (di mana pemeriksaan dilakukan segera), tetapi sebelum aturan batasan NO ACTION (di mana pemeriksaan dilakukan di akhir pernyataan). Pemicu dan aturan terjadi dalam urutan berikut

Bisakah kita menghapus baris dengan kunci asing?

Keluaran. Tabel student_exam memiliki kunci asing student_id referensi student_id di tabel student_details. Di sini, ON DELETE CASCADE ditambahkan karena bila ada baris yang dihapus dalam satu tabel, baris yang sama akan dihapus dalam tabel referensi asing yang mereferensikan kunci utama dalam tabel itu.

Bagaimana cara menghapus baris yang memiliki batasan kunci asing di MySQL?

Anda dapat membuang batasan kunci asing menggunakan sintaks ALTER TABLE berikut. ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol; Jika klausa FOREIGN KEY menentukan nama CONSTRAINT saat Anda membuat batasan, Anda dapat merujuk ke nama tersebut untuk menghapus .

Bagaimana cara menghapus baris dari tabel dengan batasan kunci asing di SQL Server?

Dalam spesifikasi INSERT dan UPDATE, pilih Cascade untuk aturan hapus. Klik Tutup dan simpan tabel di desainer. Klik Ya di jendela pesan peringatan. Setelah Anda mengklik Ya, kunci asing dengan aturan hapus dibuat

Bagaimana cara menghapus baris tertentu di MySQL?

Untuk menghapus baris dalam tabel MySQL, gunakan pernyataan DELETE FROM . HAPUS DARI produk DIMANA product_id=1; .