【问题标题】:MySQL error 150 with foreign keys带有外键的 MySQL 错误 150
【发布时间】:2014-02-26 18:50:19
【问题描述】:

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

连我的数据库老师都找不到问题出在哪里。

【问题讨论】:

    标签: mysql sql database foreign-keys sqlfiddle


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      CREATE TABLE Tipo(
      ...
      );
      
      CREATE TABLE Aparato(
      ...
      );
      

      感谢大家的快速回答。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2016-08-18
        • 1970-01-01
        • 2011-07-18
        相关资源
        最近更新 更多