MySQL ошибка 150 с внешними ключами

У меня есть эта проблема с использованием внешних ключей на MySQL. Я новичок в этом языке, и я прочитал много официальной документации, но ничего не понял.

Я также проверил другие вопросы на этом сайте о внешних ключах, но также не помог мне. Я даже скопировал правильный код и изменил имена в моем случае, и это продолжало давать мне ошибки.

Я использую SQL Fiddle, чтобы проверить мой синтаксис. Это код:

CREATE TABLE Aparato(
Codigo SMALLINT NOT NULL AUTO_INCREMENT,
Descripcion VARCHAR(40) NOT NULL,
TipoNombre VARCHAR(20) NOT NULL,
TipoCaracteristicas VARCHAR(30) NOT NULL,
FOREIGN KEY (TipoNombre) REFERENCES Tipo(Nombre),
FOREIGN KEY (TipoCaracteristicas) REFERENCES Tipo(Caracteristicas),
PRIMARY KEY (Codigo)
);

CREATE TABLE Tipo(
Nombre VARCHAR(20) NOT NULL,
Caracteristicas VARCHAR(30) NOT NULL,
PRIMARY KEY (Nombre)
);

Это по-испански, но я не думаю, что это актуально. Я получаю эту ошибку, вы можете попробовать сами ( SQL Fiddle):

Schema Creation Failed: Can't create table 'db_2_b9c14b.aparato' (errno: 150):

Даже мой учитель баз данных не может найти, где проблема.

2 ответа

Решение

Я понял. SQL Fiddle не позволяет ссылаться на более чем один PK ИЗ ОДНОГО ТАБЛИЦЫ. Если вы собираетесь ссылаться на несколько ключей из одной таблицы, вы должны написать только одну строку FOREIGN KEY, вот так:

FOREIGN KEY (TipoNombre,TipoCaracteristicas) REFERENCES Tipo(Nombre,Caracteristicas)

Кроме того, ссылочная таблица должна быть на первом месте.

CREATE TABLE Tipo(
...
);

CREATE TABLE Aparato(
...
);

Спасибо всем за быстрый ответ.

Вы можете пометить свои Caracteristicas как UNIQUE или добавить как первичный ключ:

CREATE TABLE Tipo(    
  Nombre VARCHAR(20) NOT NULL, 
  Caracteristicas VARCHAR(30) NOT NULL,  
  PRIMARY KEY (Nombre,Caracteristicas) 
);
Другие вопросы по тегам