【问题标题】:ERROR 1005 (HY000): Can't create table 'nortus.#sql-4e0_28' (errno: 150)错误 1005 (HY000): 无法创建表 'nortus.#sql-4e0_28' (errno: 150)
【发布时间】:2014-05-11 23:14:44
【问题描述】:

我得到 MySQL errno 150 创建外键。我已经阅读了 MySQL 创建外键的限制,它们都可以。

服务器版本:5.5.35-0ubuntu0.13.10.2 (Ubuntu)

SQL:

CREATE TABLE idioma (
    id INT(2) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    sigla VARCHAR(5) NOT NULL,
    nome VARCHAR(30) NOT NULL,
    UNIQUE INDEX ix_idioma_sigla (sigla)
) ENGINE=InnoDB;

CREATE TABLE traducao_registro (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    id_idioma INT(2) NOT NULL,
    tabela VARCHAR(50) NOT NULL,
    campo VARCHAR(50) NOT NULL,
    id_registro INT NOT NULL,
    traducao TEXT,
    INDEX ix_traducao_registro_idioma (id_idioma),
    INDEX ix_traducao_registro_tabela (tabela),
    INDEX ix_traducao_registro_campo (campo),
    INDEX ix_traducao_registro_registro (id_registro),
    INDEX uk_traducao_registro_idioma_registro (tabela, campo, id_registro, id_idioma)
) ENGINE=InnoDB;
ALTER TABLE traducao_registro ADD CONSTRAINT FOREIGN KEY fk_traducao_registro_idioma (id_idioma) REFERENCES idioma.id;

show create table idioma;

| idioma | CREATE TABLE `idioma` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `sigla` varchar(5) NOT NULL,
  `nome` varchar(30) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ix_idioma_sigla` (`sigla`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

显示创建表traducao_registro;

| traducao_registro | CREATE TABLE `traducao_registro` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_idioma` int(2) NOT NULL,
  `tabela` varchar(50) NOT NULL,
  `campo` varchar(50) NOT NULL,
  `id_registro` int(11) NOT NULL,
  `traducao` text,
  PRIMARY KEY (`id`),
  KEY `ix_traducao_registro_idioma` (`id_idioma`),
  KEY `ix_traducao_registro_tabela` (`tabela`),
  KEY `ix_traducao_registro_campo` (`campo`),
  KEY `ix_traducao_registro_registro` (`id_registro`),
  KEY `uk_traducao_registro_idioma_registro` (`tabela`,`campo`,`id_registro`,`id_idioma`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

【问题讨论】:

    标签: mysql foreign-keys errno


    【解决方案1】:

    您的语法稍有偏差:在您的 ALTER 语句中,将 idioma.id 更改为 idioma(id)

    ALTER TABLE traducao_registro
      ADD CONSTRAINT FOREIGN KEY fk_traducao_registro_idioma (id_idioma)
      REFERENCES idioma(id); -- change here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 2016-10-12
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2019-02-26
      相关资源
      最近更新 更多