0

我在 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):

甚至我的数据库老师也找不到问题出在哪里。

4

2 回答 2

0

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

CREATE TABLE Tipo(    
  Nombre VARCHAR(20) NOT NULL, 
  Caracteristicas VARCHAR(30) NOT NULL,  
  PRIMARY KEY (Nombre,Caracteristicas) 
);
于 2014-02-26T19:03:20.107 回答
0

我想通了。SQL Fiddle 不允许引用多个 PK FROM THE SAME TABLE。如果你要从同一个表中引用几个键,你必须只写一个 FOREIGN KEY 行,就像这样:

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

此外,引用的表必须放在首位。

CREATE TABLE Tipo(
...
);

CREATE TABLE Aparato(
...
);

感谢大家的快速回答。

于 2014-02-27T09:46:17.660 回答