ОШИБКА 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