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

Lỗi khóa ngoại MySQL 1005 errno 150 khóa chính làm khóa ngoại

Khi tạo ràng buộc khóa ngoại, MySQL yêu cầu một chỉ mục có thể sử dụng được trên cả bảng tham chiếu và cả trên bảng được tham chiếu. Chỉ mục trên bảng tham chiếu được tạo tự động nếu một chỉ mục không tồn tại, nhưng chỉ mục trên bảng tham chiếu cần được tạo theo cách thủ công ( Nguồn ). Của bạn dường như bị thiếu.

Trường hợp thử nghiệm:

CREATE TABLE tbl_a (
    id int PRIMARY KEY,
    some_other_id int,
    value int
) ENGINE=INNODB;
Query OK, 0 rows affected (0.10 sec)

CREATE TABLE tbl_b (
    id int PRIMARY KEY,
    a_id int,
    FOREIGN KEY (a_id) REFERENCES tbl_a (some_other_id)
) ENGINE=INNODB;
ERROR 1005 (HY000): Can't create table 'e.tbl_b' (errno: 150)

Nhưng nếu chúng ta thêm chỉ mục trên some_other_id :

CREATE INDEX ix_some_id ON tbl_a (some_other_id);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

CREATE TABLE tbl_b (
    id int PRIMARY KEY,
    a_id int,
    FOREIGN KEY (a_id) REFERENCES tbl_a (some_other_id)
) ENGINE=INNODB;
Query OK, 0 rows affected (0.06 sec)

Đây thường không phải là vấn đề trong hầu hết các tình huống, vì trường được tham chiếu thường là khóa chính của bảng được tham chiếu và khóa chính được lập chỉ mục tự động.



  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 &MySQL:mysqli_num_rows () mong muốn tham số 1 là mysqli_result, boolean đã cho

  2. Chọn tất cả các cột ngoại trừ một trong MySQL?

  3. MySQL - làm thế nào để mã zip phía trước bằng 0?

  4. Hướng dẫn thiết kế cơ sở dữ liệu cho sự kiện lịch và lời nhắc trong MySQL

  5. Hỗ trợ PDO cho nhiều truy vấn (PDO_MYSQL, PDO_MYSQLND)