ОШИБКА 1005 (HY000): не удалось создать таблицу 'nortus.# Sql-4e0_28' (номер ошибки: 150)

Я получаю 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;

показать создать таблицу идиома;

| 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 |

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
Другие вопросы по тегам