Ringkasan. dalam tutorial ini, Anda akan belajar tentang kunci asing MySQL dan cara membuat, menjatuhkan, dan menonaktifkan batasan kunci asing Show
Pengantar kunci asing MySQLKunci asing adalah kolom atau grup kolom dalam tabel yang terhubung ke kolom atau grup kolom di tabel lain. Kunci asing menempatkan batasan pada data dalam tabel terkait, yang memungkinkan MySQL mempertahankan integritas referensial Mari kita lihat tabel 5 dan 6 berikut dari database sampel Dalam diagram ini, setiap pelanggan dapat memiliki nol atau banyak pesanan dan setiap pesanan dimiliki oleh satu pelanggan Hubungan antara tabel 5 dan tabel 6 adalah satu-ke-banyak. Dan hubungan ini dibuat oleh kunci asing di tabel 6 yang ditentukan oleh kolom 0 Kolom _0 di tabel 6 terhubung ke kolom 0 primary key di tabel 5 Tabel 5 disebut tabel induk atau tabel referensi, dan tabel 6 disebut tabel anak atau tabel referensi Biasanya, kolom kunci asing dari tabel anak sering merujuk ke kolom kunci utama dari tabel induk Sebuah tabel dapat memiliki lebih dari satu kunci asing di mana setiap kunci asing merujuk ke kunci utama dari tabel induk yang berbeda Setelah batasan kunci asing diberlakukan, kolom kunci asing dari tabel anak harus memiliki baris yang sesuai di kolom kunci induk dari tabel induk atau nilai dalam kolom kunci asing ini harus 7 (lihat contoh tindakan 8 di bawah) Misalnya, setiap baris dalam tabel _6 memiliki 0 yang ada di kolom 0 dari tabel 5. Beberapa baris dalam tabel _6 dapat memiliki 0 yang sama Kunci asing referensi sendiriTerkadang, tabel anak dan orang tua dapat merujuk ke tabel yang sama. Dalam hal ini, kunci asing merujuk kembali ke kunci utama dalam tabel yang sama Lihat tabel _5 berikut dari database sampel Kolom _6 adalah kunci asing yang mengacu pada kolom 7 yang merupakan kunci utama dari tabel 5 Hubungan ini memungkinkan tabel _5 untuk menyimpan struktur pelaporan antara karyawan dan manajer. Setiap karyawan melapor kepada nol atau satu karyawan dan seorang karyawan dapat memiliki nol atau banyak bawahan Kunci asing pada kolom _6 dikenal sebagai kunci asing rekursif atau self-referensi Sintaks MySQL ________26______1Berikut adalah sintaks dasar untuk mendefinisikan batasan kunci asing dalam pernyataan 2 atau 3
Dalam sintaks ini Pertama, tentukan nama batasan kunci asing yang ingin Anda buat setelah kata kunci 4. Jika Anda menghilangkan nama kendala, MySQL secara otomatis menghasilkan nama untuk kendala kunci asing Kedua, tentukan daftar kolom kunci asing yang dipisahkan koma setelah kata kunci 1. Nama kunci asing juga opsional dan dihasilkan secara otomatis jika Anda melewatkannya Ketiga, tentukan tabel induk diikuti dengan daftar kolom yang dipisahkan koma yang dirujuk oleh kolom kunci asing Terakhir, tentukan bagaimana kunci asing mempertahankan integritas referensial antara tabel anak dan induk dengan menggunakan klausa 6 dan 7. _8 menentukan tindakan yang akan diambil MySQL ketika nilai dalam kolom kunci induk dihapus ( 6) atau diperbarui ( 7) MySQL memiliki lima opsi referensi. 1, 8, 3, 4, dan 5
Faktanya, MySQL sepenuhnya mendukung tiga tindakan. 4, 1 dan 8 Jika Anda tidak menentukan klausa 6 dan 7, tindakan defaultnya adalah 4 MySQL INSERT INTO products(productName, categoryId) VALUES('iPad',3);Code language: SQL (Structured Query Language) (sql)_1 contohMari buat database baru bernama 0 untuk demonstrasi
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`fkdemo`.`products`, CONSTRAINT `fk_category` FOREIGN KEY (`categoryId`) REFERENCES `categories` (`categoryId`) ON DELETE RESTRICT ON UPDATE RESTRICT)Code language: JavaScript (javascript)4 & Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`fkdemo`.`products`, CONSTRAINT `fk_category` FOREIGN KEY (`categoryId`) REFERENCES `categories` (`categoryId`) ON DELETE RESTRICT ON UPDATE RESTRICT)Code language: JavaScript (javascript)3 tindakanDi dalam database _0, buat dua tabel 4 dan 5
_6 di tabel 5 adalah kolom kunci asing yang merujuk ke kolom 6 di 4 tabel Karena kami tidak menentukan klausa 7 dan 6, tindakan default adalah 4 untuk operasi pembaruan dan penghapusan Langkah-langkah berikut mengilustrasikan tindakan _4 1) Masukkan dua baris ke dalam tabel ________56______4
2) Pilih data dari tabel ________56______4
3) Masukkan baris baru ke dalam tabel 5.
Ini berfungsi karena _6 1 ada di tabel 4 4) Mencoba menyisipkan baris baru ke dalam tabel 5 dengan nilai 6 tidak ada dalam tabel 4
MySQL mengeluarkan kesalahan berikut
5) Perbarui nilai di kolom _6 di tabel 4 ke 14
MySQL mengeluarkan kesalahan ini
Karena opsi 4, Anda tidak dapat menghapus atau memperbarui _16 karena direferensikan oleh 17 18 di tabel 5 Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`fkdemo`.`products`, CONSTRAINT `fk_category` FOREIGN KEY (`categoryId`) REFERENCES `categories` (`categoryId`) ON DELETE RESTRICT ON UPDATE RESTRICT)Code language: JavaScript (javascript)_1 tindakanLangkah-langkah ini menggambarkan cara kerja tindakan 21 dan 22 1) Jatuhkan tabel 5 _0 2) Buat tabel _5 dengan opsi 21 dan 26 untuk kunci asing _1 3) Masukkan empat baris ke dalam tabel 5 _2 4) Pilih data dari tabel 5 3 5) Perbarui 6 1 hingga 100 di tabel 4. _4 6) Verifikasi pembaruan
7) Dapatkan data dari tabel 5. 3 Seperti yang Anda lihat, dua baris dengan nilai 18 di kolom 6 dari tabel 5 secara otomatis diperbarui ke 14 karena tindakan 21. 8) Hapus _6 2 dari tabel 4 _7 9) Verifikasi penghapusan
10) Periksa tabel 5. 3 Semua produk dengan 6 2 dari tabel 5 otomatis dihapus karena tindakan 26. SELECT * FROM categories;Code language: SQL (Structured Query Language) (sql)8 tindakanLangkah-langkah ini menggambarkan cara kerja tindakan _44 dan 45 1) Jatuhkan tabel _4 dan 5 0 2) Buat tabel _4 dan 5 1 Kunci asing di tabel _5 diubah menjadi opsi 44 dan 45 3) Masukkan baris ke dalam tabel 4 2 4) Masukkan baris ke dalam tabel 5 _2 5) Perbarui _6 dari 1 hingga 100 di tabel 4 _4 6) Verifikasi pembaruan
7) Pilih data dari tabel 5. Baris dengan 6 1 di tabel 5 secara otomatis disetel ke 7 karena tindakan 44 8) Hapus _6 2 dari tabel 4 6 9) Periksa tabel _5 3 Nilai-nilai dalam kolom 6 dari baris dengan 6 2 dalam tabel 5 secara otomatis diatur ke 7 karena tindakan 45. Jatuhkan batasan kunci asing MySQLUntuk menghapus batasan kunci asing, Anda menggunakan pernyataan 70 8 Dalam sintaks ini
Perhatikan bahwa 73 adalah nama batasan kunci asing yang ditentukan saat Anda membuat atau menambahkan batasan kunci asing ke tabel Untuk mendapatkan nama kendala yang dihasilkan dari tabel, Anda menggunakan pernyataan 74 _9 Misalnya, untuk melihat kunci asing dari tabel 5, Anda menggunakan pernyataan berikut 0 Berikut adalah output dari pernyataan tersebut Seperti yang Anda lihat dengan jelas dari output, tabel 5 tabel memiliki satu batasan kunci asing. _77 Dan pernyataan ini menghilangkan batasan kunci asing dari tabel 5 _1 Untuk memastikan batasan kunci asing telah dihilangkan, Anda dapat melihat struktur tabel produk 0 Menonaktifkan pemeriksaan kunci asingKadang-kadang, sangat berguna untuk menonaktifkan pemeriksaan kunci asing e. g. , saat Anda mengimpor data dari file CSV ke dalam tabel. Jika Anda tidak menonaktifkan pemeriksaan kunci asing, Anda harus memuat data dengan urutan yang tepat i. e. , Anda harus memuat data ke tabel induk terlebih dahulu lalu tabel anak, yang bisa membosankan. Namun, jika Anda menonaktifkan pemeriksaan kunci asing, Anda dapat memuat data ke dalam tabel dalam urutan apa pun Untuk menonaktifkan pemeriksaan kunci asing, Anda menggunakan pernyataan berikut _3 Dan Anda dapat mengaktifkannya dengan menggunakan pernyataan berikut _4 Dalam tutorial ini, Anda telah mempelajari tentang kunci asing MySQL dan cara membuat batasan kunci asing dengan berbagai opsi referensi Bagaimana cara menambahkan kunci asing di MySQL?Anda dapat menambahkan batasan kunci asing menggunakan pernyataan CREATE TABLE atau ALTER TABLE di SQL. Berikut sintaks untuk membuat kunci asing di MySQL. UBAH TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (nama_kunci_asing,. ) REFERENSI parent_table(nama_kolom,. );
Mengapa saya tidak bisa membuat kunci asing di MySQL?Penyebab umum umumnya adalah ketidakcocokan jenis kolom tabel utama dan tabel asing . Ini juga bisa menjadi ketidakcocokan pada tipe Mesin dari dua tabel i. e. MyISAM atau InnoDB. Tipe data kedua kolom harus memiliki tipe data yang sama. int(11) pada satu meja dan smallint(5) pada yang lain akan menyebabkan masalah.
Bagaimana cara mengubah kolom menjadi kunci asing di MySQL?Inilah cara Anda melakukannya. UBAH TABEL my_table ADD FOREIGN KEY (key) REFERENSI other_table(id) ON DELETE SET NULL ; . Begitulah cara Anda mengubah batasan kunci asing di MySQL.
Bisakah saya membuat kunci asing untuk dilihat?Dalam arti sebenarnya, tidak, Anda tidak dapat menyetel kunci asing pada tampilan . |