Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi SQL (1215):Không thể thêm ràng buộc khóa ngoại

Bên dưới sẽ không thành công vì đối chiếu khác nhau. Tại sao tôi hiển thị điều này? Bởi vì OP đã không.

Lưu ý rằng tôi đã thu nhỏ kích thước do lỗi 1071 khi định cỡ cho varchar 255 với đối chiếu đó và sau đó bộ ký tự được chọn tự động.

Vấn đề là, nếu đối chiếu khác nhau, nó sẽ không hoạt động.

CREATE TABLE `user_details` (
    `ClientID` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`ClientID`)
)ENGINE=InnoDB;

CREATE TABLE `profilePic` (
    `ClientID` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`ClientID`),
    CONSTRAINT `FK__user_details` FOREIGN KEY (`ClientID`) REFERENCES `user_details` (`ClientID`) ON UPDATE CASCADE ON DELETE CASCADE
)COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;

Thất bại kể trên là ở mức cần bàn. Có thể thấy một lỗi phức tạp hơn gây ra lỗi 1215 do đối chiếu cấp cột không khớp trong câu trả lời này .

Đưa cuộc thảo luận lên các trường hợp chung hơn ...

cho dù bạn đang cố gắng thiết lập ràng buộc Khoá ngoại khi tạo bảng hay với ALTER TABLE

chẳng hạn như

ALTER TABLE `facility` ADD CONSTRAINT `fkZipcode` 
     FOREIGN KEY (`zipcode`) REFERENCES `allzips`(`zipcode`);

những điều sau sẽ được áp dụng.

Từ trang hướng dẫn sử dụng MySQL có tên Sử dụng FOREIGN KEY Ràng buộc :

Ngoài ra, được tham chiếu (chính) bảng phải có sẵn một khóa ngoài cùng bên trái để tra cứu nhanh (xác minh). Khóa cha đó không cần phải là PRIMARY hoặc thậm chí UNIQUE . Khái niệm này được mô tả trong đoạn thứ 2 dưới đây. Đoạn đầu tiên ám chỉ đến một Người trợ giúp chỉ mục sẽ được tạo nếu cần trong tham chiếu bảng (con) nếu cần thiết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP PDO truy vấn nhiều lựa chọn liên tục loại bỏ bộ hàng cuối cùng

  2. Bắt truy vấn xếp hạng PHP MYSQL để xếp hạng dựa trên tổng điểm

  3. Java, làm thế nào để thay đổi cơ sở dữ liệu hiện tại sang cơ sở dữ liệu khác?

  4. Lỗi kết nối Unity3D với MySQL

  5. Xóa các bản ghi trùng lặp mà không cần tạo bảng tạm thời