Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro de chave estrangeira do MySQL 1005 errno 150 chave primária como chave estrangeira


Ao criar uma restrição de chave estrangeira, o MySQL requer um índice utilizável na tabela de referência e também na tabela referenciada. O índice na tabela de referência é criado automaticamente se não existir, mas o da tabela referenciada precisa ser criado manualmente (Fonte ). O seu parece estar faltando.

Caso de teste:
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)

Mas se adicionarmos um índice em 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)

Isso geralmente não é um problema na maioria das situações, pois o campo referenciado geralmente é a chave primária da tabela referenciada e a chave primária é indexada automaticamente.