Mysql
 sql >> база данни >  >> RDS >> Mysql

Грешка във външния ключ на MySQL 1005 errno 150 първичен ключ като външен ключ

Когато създава ограничение за външен ключ, MySQL изисква използваем индекс както в референтната таблица, така и в реферираната таблица. Индексът на референтната таблица се създава автоматично, ако такава не съществува, но този в референтната таблица трябва да бъде създаден ръчно (Източник ). Вашият изглежда липсва.

Тестов случай:

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)

Но ако добавим индекс към 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)

Това често не е проблем в повечето ситуации, тъй като реферираното поле често е първичен ключ на реферираната таблица и първичният ключ се индексира автоматично.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да съхранявам и извличам изображения от MySQL база данни с помощта на PHP?

  2. MySQL – Различни методи за познаване на текущия потребител

  3. Какъв тип данни да използвате за полето за хеширана парола и каква дължина?

  4. Проверете за x последователни дни - дадени времеви печати в базата данни

  5. Асинхронно репликация Автоматично отказване в MySQL 8.0.22