Jawaban:
Ya, tetapi hanya menyala Innodb. Innodb saat ini merupakan satu-satunya format tabel yang dikirimkan yang menerapkan kunci asing.
Rupanya indeks dibuat secara otomatis seperti yang ditentukan dalam tautan yang telah diposting robert .
InnoDB membutuhkan indeks pada kunci asing dan kunci referensi sehingga pemeriksaan kunci asing dapat cepat dan tidak memerlukan pemindaian tabel. Dalam tabel referensi, harus ada indeks di mana kolom kunci asing terdaftar sebagai kolom pertama dalam urutan yang sama. Indeks semacam itu dibuat pada tabel referensi secara otomatis jika tidak ada. (Ini berbeda dengan beberapa versi yang lebih lama, di mana indeks harus dibuat secara eksplisit atau pembuatan batasan kunci asing akan gagal.) Index_name, jika diberikan, digunakan seperti yang dijelaskan sebelumnya.
InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
Ya, lihat InnoDB dan Kendala KUNCI ASING .
Anda tidak mendapatkan indeks secara otomatis jika Anda melakukan ALTER TABLE (bukan CREATE TABLE), setidaknya menurut dokumen (tautannya untuk 5.1 tetapi sama untuk 5.5):
[...] Saat Anda menambahkan batasan kunci asing ke tabel menggunakan ALTER TABLE, ingat untuk membuat indeks yang diperlukan terlebih dahulu.
Bagi mereka yang mencari kutipan dari 5.7
dokumen :
MySQL memerlukan indeks pada kunci asing dan kunci referensi sehingga pemeriksaan kunci asing dapat cepat dan tidak memerlukan pemindaian tabel. Dalam tabel referensi, harus ada indeks di mana kolom kunci asing terdaftar sebagai kolom pertama dalam urutan yang sama. Indeks semacam itu dibuat pada tabel referensi secara otomatis jika tidak ada. Indeks ini mungkin turun secara diam-diam nanti, jika Anda membuat indeks lain yang dapat digunakan untuk menegakkan batasan kunci asing. index_name, jika diberikan, digunakan seperti yang dijelaskan sebelumnya.
Sebagaimana dinyatakan itu untuk InnoDB. Pada awalnya saya pikir itu aneh bahwa banyak lainnya (khususnya MS SQL dan DB2) tidak. Pemindaian TableSpace hanya lebih baik daripada pemindaian indeks ketika ada sangat sedikit baris tabel - jadi untuk sebagian besar kasus kunci asing ingin diindeks. Lalu itu semacam memukul saya - ini tidak selalu berarti itu harus menjadi indeks yang berdiri sendiri (satu kolom) - di mana ia berada di Indeks FK otomatis MySQL. Jadi, mungkin itu adalah alasan MS SQL, DB2 (Oracle saya tidak yakin), dll. Serahkan saja pada DBA; setelah semua indeks pada tabel besar dapat menyebabkan masalah dengan kinerja dan ruang.
Ya, Innodb
berikan ini. Anda dapat memasukkan nama kunci asing setelah FOREIGN KEY
klausa atau membiarkannya membiarkan MySQL membuat nama untuk Anda. MySQL secara otomatis membuat indeks dengan foreign_key_name
nama tersebut.
CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action