sql >> Database >  >> RDS >> Mysql

MySQL Foreign Key Error 1005 errno 150 primaire sleutel als externe sleutel

Bij het maken van een externe-sleutelbeperking vereist MySQL een bruikbare index op zowel de referentietabel als ook op de tabel waarnaar wordt verwezen. De index op de referentietabel wordt automatisch aangemaakt als deze niet bestaat, maar de index in de referentietabel moet handmatig worden aangemaakt (Bron ). De jouwe lijkt te ontbreken.

Testgeval:

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)

Maar als we een index toevoegen op 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)

In de meeste situaties is dit vaak geen probleem, aangezien het veld waarnaar wordt verwezen vaak de primaire sleutel is van de tabel waarnaar wordt verwezen en de primaire sleutel automatisch wordt geïndexeerd.



  1. Kan geen verbinding maken met MySQL vanuit Java:NullPointerException in verbindingslogica van MySQL-stuurprogramma

  2. Hoe u ervoor kunt zorgen dat uw MySQL-database beveiligd is?

  3. Hoe echo ik een Resource-id #6 van een MySql-antwoord in PHP?

  4. Dagen aan een datum toevoegen in T-SQL