Mã lỗi:1005 - có một tham chiếu khóa chính không chính xác trong mã của bạn
Thông thường, đó là do trường khóa ngoại được tham chiếu không tồn tại. Có thể là bạn mắc lỗi đánh máy, hoặc trường hợp kiểm tra phải giống nhau hoặc có sự không khớp về loại trường. Các trường được liên kết với khóa ngoại phải khớp chính xác với các định nghĩa.
Một số nguyên nhân đã biết có thể là:
- Hai loại trường chính và / hoặc kích thước không khớp chính xác. Ví dụ:nếu một là
INT(10)
trường khóa cần phải làINT(10)
cũng như không phảiINT(11)
hoặcTINYINT
. Bạn có thể muốn xác nhận kích thước trường bằng cách sử dụngSHOW
CREATE
TABLE
bởi vì Trình duyệt truy vấn đôi khi sẽ chỉ hiển thị trực quanINTEGER
cho cảINT(10)
vàINT(11)
. Bạn cũng nên kiểm tra xem một tài khoản không phải làSIGNED
và cái kia làUNSIGNED
. Cả hai đều phải giống hệt nhau. - Một trong những trường khóa mà bạn đang cố gắng tham chiếu không có chỉ mục và / hoặc không phải là khóa chính. Nếu một trong các trường trong mối quan hệ không phải là khóa chính, bạn phải tạo chỉ mục cho trường đó.
- Tên khóa ngoại trùng với một khóa đã tồn tại. Kiểm tra xem tên khóa ngoại của bạn có phải là duy nhất trong cơ sở dữ liệu của bạn không. Chỉ cần thêm một vài ký tự ngẫu nhiên vào cuối tên khóa của bạn để kiểm tra điều này.
- Một hoặc cả hai bảng của bạn là
MyISAM
bàn. Để sử dụng khóa ngoại, cả hai bảng phải làInnoDB
. (Trên thực tế, nếu cả hai bảng đều làMyISAM
thì bạn sẽ không nhận được thông báo lỗi - nó sẽ không tạo ra khóa.) Trong Trình duyệt truy vấn, bạn có thể chỉ định loại bảng. - Bạn đã chỉ định một tầng
ON
DELETE
SET
NULL
, nhưng trường khóa liên quan được đặt thànhNOT
NULL
. Bạn có thể khắc phục điều này bằng cách thay đổi tầng của bạn hoặc đặt trường để cho phépNULL
giá trị. - Đảm bảo rằng các tùy chọn Bộ mã và Đối chiếu đều giống nhau ở cấp bảng cũng như cấp trường riêng lẻ cho các cột chính.
- Bạn có một giá trị mặc định (nghĩa là, mặc định =0) trên cột khóa ngoại của mình
- Một trong các trường trong mối quan hệ là một phần của khóa kết hợp (tổng hợp) và không có chỉ mục riêng của nó. Mặc dù trường có chỉ mục là một phần của khóa tổng hợp, bạn phải tạo chỉ mục riêng cho chỉ trường khóa đó để sử dụng nó trong một ràng buộc.
- Bạn có lỗi cú pháp trong
ALTER
của mình hoặc bạn đã nhập sai một trong các tên trường trong mối quan hệ - Tên khóa ngoại của bạn vượt quá độ dài tối đa là 64 ký tự.
Để biết thêm chi tiết, hãy tham khảo: Số lỗi MySQL 1005 Không thể tạo bảng