Ringkasan: dalam tutorial ini johanandyagasiblogspotcom, Anda akan belajar tentang MySQL kunci asing dan cara membuat, menambah, dan drop batasan kunci asing di MySQL.
Pengenalan MySQL kunci asing
Kunci asing adalah bidang dalam tabel yang cocok dengan bidang meja lain. Sebuah asing tempat kendala utama pada data dalam tabel terkait, yang memungkinkan MySQL untuk menjaga integritas referensial.
Mari kita lihat diagram database berikut di database contoh .
johanandyagasiblogspotcom Kami memiliki dua tabel:
customers
dan orders
. Setiap pelanggan memiliki nol atau lebih perintah dan setiap pesanan milik hanya satu pelanggan. Hubungan antara customers
meja dan orders
meja adalah satu-ke-banyak, dan itu didirikan oleh kunci asing dalam orders
tabel ditentukan oleh customerNumber
lapangan. The customerNumber
lapangan di orders
tabel berkaitan dengan customerNumber
bidang kunci utama dalam customers
tabel.
The
customers
tabel disebut tabel induk atau meja direferensikan, dan orders
tabel dikenal sebagai tabel anak atau meja referensi.
Kunci asing tidak hanya satu kolom, tetapi juga satu set kolom. Kolom dalam tabel anak sering merujuk pada kolom kunci utama dalam tabel induk.
johanandyagasiblogspotcom Sebuah meja mungkin memiliki lebih dari satu kunci asing, dan masing-masing kunci asing di tabel anak dapat memiliki tabel induk yang berbeda.
Sebuah baris dalam tabel anak harus mengandung nilai-nilai yang ada di induk meja misalnya, setiap record ketertiban di
orders
tabel harus memiliki customerNumber
yang ada di customers
tabel. Beberapa perintah dapat merujuk kepada pelanggan yang sama karena hubungan ini disebut satu (pelanggan) ke banyak (order), atau satu-ke-banyak.
Kadang-kadang, anak dan orang tua meja adalah meja yang sama. Kunci asing mengacu kembali ke primary key dari tabel misalnya, berikut
employees
tabel:The
reportTo
kolom kunci asing yang mengacu pada employeeNumber
kolom yang merupakan kunci utama dari employees
meja untuk mencerminkan struktur pelaporan antara karyawan yaitu, setiap laporan karyawan untuk antera karyawan dan karyawan dapat memiliki nol atau lebih laporan langsung.
The
reportTo
kunci asing ini juga dikenal sebagai kunci asing rekursif atau diri-referensi.
johanandyagasiblogspotcom Kunci asing menegakkan integritas referensial yang membantu Anda menjaga konsistensi dan integritas data otomatis. Misalnya, Anda tidak dapat membuat agar pelanggan tidak ada.
Selain itu, Anda dapat mengatur kaskade aksi delete untuk
customerNumber
kunci asing sehingga ketika Anda menghapus pelanggan di customers
meja, semua perintah yang berhubungan dengan pelanggan juga dihapus. Hal ini menghemat waktu Anda dan upaya menggunakan beberapa pernyataan DELETE atau DELETE BERGABUNG pernyataan .
johanandyagasiblogspotcom Sama seperti penghapusan, Anda juga dapat menentukan kaskade pada tindakan pembaruan untuk
customerNumber
kunci asing untuk melakukan update tabel silang tanpa menggunakan beberapa UPDATE pernyataan atau UPDATE BERGABUNG pernyataan .
Dalam MySQL, InnoDB storage engine mendukung kunci asing sehingga Anda harus membuat tabel InnoDB untuk menggunakan batasan kunci asing.
MySQL membuat tabel kunci asing
MySQL membuat sintaks kunci asing
Sintaks berikut menggambarkan bagaimana untuk menentukan kunci asing dalam tabel anak di CREATE TABLE pernyataan.
CONSTRAINT constraint_name FOREIGN KEY foreign_key_name ( columns ) REFERENCES parent_table ( columns ) ON DELETE action ON UPDATE actionMari kita memeriksa sintaks secara lebih rinci:
- The
CONSTRAINT
klausul memungkinkan Anda untuk menentukan nama kendala untuk batasan kunci asing. Jika Anda menghilangkan itu, MySQL akan menghasilkan nama otomatis. - The
FOREIGN KEY
clause menentukan kolom dalam tabel anak yang merujuk pada kolom kunci utama dalam tabel induk. Anda dapat menempatkan sebuah nama kunci asing setelahFOREIGN KEY
clause atau tinggalkan untuk membiarkan MySQL untuk membuat nama untuk Anda. Perhatikan bahwa MySQL secara otomatis membuat indeks denganforeign_key_name
nama. - The
REFERENCES
klausul menentukan tabel induk dan kolom untuk yang kolom di tabel anak merujuk. Jumlah kolom dalam tabel anak dan tabel induk ditentukan dalamFOREIGN KEY
danREFERENCES
harus sama. - The
ON DELETE
klausa memungkinkan Anda untuk menentukan apa yang terjadi pada catatan dalam tabel anak ketika catatan dalam tabel induk dihapus. Jika Anda menghilangkanON DELETE
klausa dan menghapus catatan dalam tabel induk yang memiliki catatan dalam tabel anak merujuk, MySQL akan menolak penghapusan. Selain itu, MySQL juga menyediakan Anda dengan tindakan sehingga Anda dapat memiliki pilihan lain seperti ON DELETE CASCADE yang memungkinkan MySQL untuk menghapus catatan dalam tabel anak yang merujuk ke rekor dalam tabel induk ketika catatan dalam tabel induk dihapus. Jika Anda tidak ingin catatan terkait di tabel anak yang akan dihapus, Anda menggunakanON DELETE SET NULL
tindakan sebaliknya. MySQL akan menetapkan nilai-nilai kolom kunci asing dalam tabel anak untukNULL
ketika catatan dalam tabel induk dihapus, dengan syarat bahwa kolom kunci asing dalam tabel anak harus menerimaNULL
nilai. Perhatikan bahwa jika Anda menggunakanON DELETE NO ACTION
atauON DELETE RESTRICT
tindakan, MySQL akan menolak penghapusan. - The
ON UPDATE
klausa memungkinkan Anda untuk menentukan apa yang terjadi pada baris dalam tabel anak ketika baris dalam tabel induk diperbarui. Anda dapat menghilangkanON UPDATE
klausa untuk membiarkan MySQL untuk menolak pembaruan apapun untuk baris dalam tabel anak ketika baris dalam tabel induk diperbarui. TheON UPDATE CASCADE
tindakan memungkinkan Anda untuk melakukan update tabel silang, danON UPDATE SET NULL
tindakan ulang nilai-nilai dalam baris dalam tabel anak untukNULL
nilai ketika baris dalam tabel induk diperbarui. TheON UPDATE NO ACTION
atauUPDATE RESTRICT
tindakan menolak pembaruan.
MySQL membuat tabel contoh kunci asing
johanandyagasiblogspotcom Contoh berikut membuatdbdemo
database dan dua tabel: categories
dan products
. Setiap kategori memiliki satu atau lebih produk dan setiap produk milik satu kategori. The cat_id
lapangan di products
tabel didefinisikan sebagai kunci asing dengan UPDATE ON CASCADE
dan DELETE ON RESTRICT
tindakan.CREATE DATABASE IF NOT EXISTS dbdemo ; USE dbdemo ; CREATE TABLE categories ( cat_id int not null auto_increment primary key , cat_name varchar ( 255 ) not null , cat_description text ) ENGINE = InnoDB ; CREATE TABLE products ( prd_id int not null auto_increment primary key , prd_name varchar ( 355 ) not null , prd_price decimal , cat_id int not null , FOREIGN KEY fk_cat ( cat_id ) REFERENCES categories ( cat_id ) ON UPDATE CASCADE ON DELETE RESTRICT ) ENGINE = InnoDB ;
MySQL menambahkan kunci asing
MySQL menambahkan sintaks kunci asing
Untuk menambahkan kunci asing untuk tabel yang ada, Anda menggunakan ALTER TABLE pernyataan dengan sintaks definisi kunci asing di atas:ALTER table_name ADD CONSTRAINT constraint_name FOREIGN KEY foreign_key_name ( columns ) REFERENCES parent_table ( columns ) ON DELETE action ON UPDATE action
MySQL menambahkan contoh kunci asing
Sekarang, mari kita tambahkan tabel bernama baruvendors
dan mengubah products
tabel untuk memasukkan bidang penjual id: USE dbdemo ; CREATE TABLE vendors ( vdr_id int not null auto_increment primary key , vdr_name varchar ( 255 ) ) ENGINE = InnoDB ; ALTER TABLE products ADD COLUMN vdr_id int not null AFTER cat_id ;
Untuk menambahkan kunci asing ke products meja, Anda menggunakan pernyataan berikut:
ALTER TABLE products ADD FOREIGN KEY fk_vendor ( vdr_id ) REFERENCES vendors ( vdr_id ) ON DELETE NO ACTION ON UPDATE CASCADE ;Sekarang,
products
meja memiliki dua kunci asing, satu mengacu pada categories
meja dan lain mengacu pada vendors
meja.Penurunan MySQL kunci asing
Anda juga menggunakanALTER TABLE
pernyataan untuk menjatuhkan kunci asing sebagai pernyataan berikut:ALTER TABLE table_name DROP FOREIGN KEY constraint_name
Dalam pernyataan di atas:
Pertama, Anda menentukan nama tabel dari mana Anda ingin menghapus kunci asing.
Kedua, Anda menempatkan nama kendala setelah DROP FOREIGN KEY clause.
johanandyagasiblogspotcom Perhatikan bahwa constraint_name adalah nama dari kendala yang ditentukan saat membuat atau menambahkan kunci asing ke meja. Jika Anda menghilangkan itu, MySQL menghasilkan nama kendala untuk Anda.
Untuk mendapatkan nama kendala yang dihasilkan dari meja, Anda menggunakan SHOW CREATE TABLE pernyataan sebagai berikut:
SHOW CREATE TABLE table_name
Misalnya, untuk melihat kunci asing dari products meja, Anda menggunakan pernyataan berikut:
SHOW CREATE TABLE products
Berikut ini adalah output dari pernyataan:
CREATE TABLE products ( prd_id int ( 11 ) NOT NULL AUTO_INCREMENT , prd_name varchar ( 355 ) NOT NULL , prd_price decimal ( 10 , 0 ) DEFAULT NULL , cat_id int ( 11 ) NOT NULL , vdr_id int ( 11 ) NOT NULL , PRIMARY KEY ( prd_id ) , KEY fk_cat ( cat_id ) , KEY fk_vendor ( vdr_id ) , CONSTRAINT products_ibfk_2 FOREIGN KEY ( vdr_id ) REFERENCES vendors ( vdr_id ) ON DELETE NO ACTION ON UPDATE CASCADE , CONSTRAINT products_ibfk_1 FOREIGN KEY ( cat_id ) REFERENCES categories ( cat_id ) ON UPDATE CASCADE ) ENGINE = InnoDB ;
The products meja memiliki dua batasan kunci asing: products_ibfk_1 dan products_ibfk_2 .
Anda dapat drop kunci asing dari products meja dengan menggunakan pernyataan berikut:
ALTER TABLE products DROP FOREIGN KEY products_ibfk_1 ; ALTER TABLE products DROP FOREIGN KEY products_ibfk_2 ;
MySQL menonaktifkan pemeriksaan kunci asing
Kadang-kadang, hal ini sangat berguna untuk menonaktifkan pemeriksaan kunci asing misalnya, ketika Anda memuat data ke dalam tabel yang memiliki kunci asing. Jika Anda tidak menonaktifkan pemeriksaan kunci asing, Anda harus memuat data ke dalam urutan yang tepat yaitu, Anda harus memuat data ke dalam tabel induk pertama dan kemudian tabel anak, yang dapat membosankan. Namun jika Anda menonaktifkan pemeriksaan kunci asing, Anda dapat memuat data ke dalam perintah.
Contoh lain adalah bahwa, kecuali jika Anda menonaktifkan pemeriksaan kunci asing, Anda tidak dapat menjatuhkan meja yang direferensikan oleh batasan kunci asing. Ketika Anda drop tabel, kendala yang ditetapkan untuk meja juga dihapus.
Untuk menonaktifkan pemeriksaan kunci asing, Anda menggunakan pernyataan berikut:
SET foreign_key_checks = 0
Dan tentu saja, Anda dapat mengaktifkannya dengan menggunakan pernyataan di bawah ini:
SET foreign_key_checks = 1
Dalam tutorial ini johanandyagasiblogspotcom, kita telah membahas banyak tentang MySQL kunci asing. Kami juga memperkenalkan Anda untuk beberapa pernyataan yang sangat berguna yang memungkinkan Anda untuk mengelola kunci asing secara efektif dalam MySQL.
0 Komentar untuk " (7) MySQL Foreign Key "