sql >> Base de Datos >  >> RDS >> Mysql

MySQL Foreign Key Error 1005 errno 150 clave principal como clave externa

Al crear una restricción de clave externa, MySQL requiere un índice utilizable tanto en la tabla de referencia como en la tabla de referencia. El índice de la tabla de referencia se crea automáticamente si no existe, pero el de la tabla de referencia debe crearse manualmente (Fuente ). Parece que falta el tuyo.

Caso de prueba:

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)

Pero si agregamos un índice en 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)

Esto no suele ser un problema en la mayoría de las situaciones, ya que el campo al que se hace referencia suele ser la clave principal de la tabla a la que se hace referencia y la clave principal se indexa automáticamente.