sql >> Databáze >  >> RDS >> Mysql

Chyba cizího klíče MySQL 1005 errno 150 primární klíč jako cizí klíč

Při vytváření omezení cizího klíče vyžaduje MySQL použitelný index jak na referenční tabulce, tak i na referenční tabulce. Index v referenční tabulce se vytvoří automaticky, pokud žádný neexistuje, ale index v referenční tabulce je třeba vytvořit ručně (Zdroj ). Zdá se, že vaše chybí.

Testovací případ:

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 pokud přidáme index na 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)

Ve většině situací to často není problém, protože odkazované pole je často primárním klíčem odkazované tabulky a primární klíč je indexován automaticky.



  1. MySQL Nesprávná hodnota data a času:'0000-00-00 00:00:00'

  2. Jak pracovat s poddotazy MySQL

  3. Chyba instalace klienta Oracle – cesta je příliš dlouhá

  4. Jaký je nejlepší způsob připojení mezi androidem a databází Oracle?