sql >> Database teknologi >  >> RDS >> Mysql

MySQL Foreign Key Error 1005 errno 150 primærnøgle som fremmednøgle

Når du opretter en fremmednøgle-begrænsning, kræver MySQL et brugbart indeks på både referencetabellen og også på den refererede tabel. Indekset på referencetabellen oprettes automatisk, hvis der ikke findes et, men indekset på den refererede tabel skal oprettes manuelt (Kilde ). Din ser ud til at mangle.

Testtilfælde:

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 hvis vi tilføjer et indeks 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)

Dette er ofte ikke et problem i de fleste situationer, da det refererede felt ofte er den primære nøgle i den refererede tabel, og den primære nøgle indekseres automatisk.



  1. SQL-server AlwaysOn-tilgængelighedsgrupper:Installation og konfiguration. Del 2

  2. Nye funktioner i SQL Server 2017 (Database Engine)

  3. Ret "FEJL 1222 (21000):De brugte SELECT-sætninger har et andet antal kolonner", når du bruger UNION i MariaDB

  4. Søg på tværs af flere tabeller og vis også tabelnavn i resulterende rækker