Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd klucza obcego MySQL 1005 errno 150 klucz podstawowy jako klucz obcy

Podczas tworzenia ograniczenia klucza obcego MySQL wymaga użytecznego indeksu zarówno w tabeli odniesienia, jak i tabeli odniesienia. Indeks w tabeli odniesienia jest tworzony automatycznie, jeśli taki nie istnieje, ale ten w tabeli odniesienia musi być utworzony ręcznie (Źródło ). Wygląda na to, że brakuje twojego.

Przypadek testowy:

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)

Ale jeśli dodamy indeks do 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)

Często nie stanowi to problemu w większości sytuacji, ponieważ pole, do którego się odwołuje, jest często kluczem podstawowym tabeli, do której się odwołuje, a klucz podstawowy jest indeksowany automatycznie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykład instrukcji JDBC — wstawianie, aktualizacja, usuwanie wsadowe

  2. MySQL/MariaDB - uporządkuj według podzapytania wewnątrz

  3. Niezdefiniowana funkcja mysql_connect()

  4. Jak wyeksportować wyniki zapytania za pomocą MySQL Workbench

  5. Podnoszenie poprzeczki w zakresie zarządzania MySQL, MariaDB, PostgreSQL i MongoDB