sql >> Databasteknik >  >> RDS >> Mysql

MySQL Foreign Key Error 1005 errnr 150 primärnyckel som främmande nyckel

När du skapar en främmande nyckel-begränsning kräver MySQL ett användbart index på både referenstabellen och även på den refererade tabellen. Indexet på referenstabellen skapas automatiskt om ett sådant inte finns, men det på referenstabellen måste skapas manuellt (Källa ). Din verkar saknas.

Testfall:

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)

Men om vi lägger till ett index på 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)

Detta är ofta inte ett problem i de flesta situationer, eftersom det refererade fältet ofta är primärnyckeln i den refererade tabellen och primärnyckeln indexeras automatiskt.



  1. Använda Percona Audit Log Plugin för databassäkerhet

  2. Android Studio 3.0 canary 1:SQL-syntaxfel

  3. PostgreSQL Connection Pooling:Del 1 – För- och nackdelar

  4. ORA - 00933 förväxling med inre sammanfogning och som