带有外键的MySQL错误150

时间:2014-02-26 18:50:19

标签: mysql sql database foreign-keys sqlfiddle

我在MySQL上使用外键时遇到此问题。我是这门语言的新手,我已经阅读了很多官方文档,但没有明确说明。

我也在本网站上查了关于外键的其他问题,但也没有帮助我。我甚至复制了一个正确的代码并用我的案例更改了名称,它一直给我错误。

我正在使用SQL Fiddle检查我的sintaxis。这是代码:

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 个答案:

答案 0 :(得分:0)

您可以将您的Caracteristic标记为UNIQUE或添加类似主键:

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

答案 1 :(得分:0)

我发现了。 SQL Fiddle不允许引用多个PK FROM THE SAME TABLE 。如果您要引用同一个表中的多个键,则必须只写一个FOREIGN KEY行,如下所示:

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

此外,引用的表必须位于第一位。

CREATE TABLE Tipo(
...
);

CREATE TABLE Aparato(
...
);

感谢大家的快速回答。