Apakah kedua tabel bertipe InnoDB?
Apakah tabel perusahaan memiliki indeks pada company_id ?
Saya kira tabel Anda adalah MyISAM (default jika Anda belum mengubah konfigurasi) dan Anda tidak dapat membuat batasan kunci asing di MyISAM. Lihat deskripsi CREATE TABLE untuk dua tabel Anda.
Jika kedua tabel kosong, jatuhkan dan buat kembali, pilih InnoDB sebagai mesin. Anda juga dapat menambahkan batasan KUNCI ASING dalam skrip pembuatan tabel.
Dari MySQL Manual Referensi :
@egervari:Apa yang terjadi jika Anda menjalankan ini:
CREATE TABLE `test` (
`company_id` bigint(20) NOT NULL,
`module_id` bigint(20) NOT NULL,
KEY (`module_id`),
KEY (`company_id`),
CONSTRAINT `test_fk_module`
FOREIGN KEY (`module_id`)
REFERENCES `module` (`module_id`),
CONSTRAINT `test_fk_company`
FOREIGN KEY (`company_id`)
REFERENCES `company` (`company_id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Dan jika Anda menjalankan:
ALTER TABLE `company_to_module`
ADD CONSTRAINT `company_to_module_fk_company`
FOREIGN KEY (`company_id`)
REFERENCES `company` (`company_id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;