Cả hai bảng đều là loại InnoDB?
Bảng công ty có chỉ mục trên company_id không?
Tôi đoán rằng bảng của bạn là MyISAM (mặc định nếu bạn chưa thay đổi cấu hình) và bạn không thể tạo các ràng buộc khóa ngoại trong MyISAM. Xem mô tả về TẠO BẢNG để có hai bảng.
Nếu cả hai bảng đều trống, hãy thả chúng và tạo lại chúng, chọn InnoDB làm công cụ. Bạn cũng có thể thêm các ràng buộc NGOẠI KHÓA trong (các) tập lệnh tạo bảng.
Từ MySQL Hướng dẫn Tham khảo :
@egervari:Điều gì sẽ xảy ra nếu bạn chạy điều này:
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 ;
Và nếu bạn chạy:
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;