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

SQL не може да създаде таблица (errno:150)

Трябва да направите едно ограничение за външен ключ, препращащо към full първичен или уникален ключ на всяка посочена таблица. Не можете да създавате отделни външни ключове към отделни колони в средата на първичния ключ на таблицата с препратки.

CREATE TABLE prospect
(Custname      VARCHAR(25) NOT NULL,
 Carmake       VARCHAR(25) NOT NULL,
 Carmodel      VARCHAR(20) NOT NULL,
 Caryear       VARCHAR(4) NOT NULL,
 Carextcolour  VARCHAR(10) NOT NULL,
 Cartrim       VARCHAR(10) NOT NULL,
 Optioncode    CHAR(4),
 CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour,           Cartrim, Optioncode),
 CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
 CONSTRAINT fk2prospect FOREIGN KEY (Carmake, Carmodel, Caryear, Carextcolour, Cartrim)
   REFERENCES car(Carmake, Carmodel, Caryear, Carextcolour, Cartrim),
 CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);

Използвах думата трябва по-горе, защото InnoDB всъщност е малко по-снизходителен от стандарта ANSI/ISO SQL, когато става въпрос за външни ключове. Стандартният SQL казва, че колоните на външния ключ трябва да бъде пълният списък с колони на посочения първичен или уникален ключ.

InnoDB ви позволява да използвате подмножество от колони, стига те да са ляв префикс на тези колони. Но не бива да правите това, защото получавате наистина объркващи резултати, когато дъщерен ред може да се позовава на множество редове в неговата родителска таблица.



  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 - ПОРЪЧАЙТЕ ПО стойности в рамките на IN()

  2. Управление на потребителски акаунт, роли, разрешения, удостоверяване на PHP и MySQL -- Част 5

  3. Намерете най-близката дата и час до определена дата и час в mysql заявка

  4. Как да направя форматиране на "Правилен случай" на колона на mysql?

  5. връзка за валидиране по имейл