Question

I'm getting MySQL errno 150 creating foreign key. I've read about the restrictions of MySQL to create foreign keys and they are OK.

Server version: 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 |

show create table 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 |
Was it helpful?

Solution

Your syntax is slightly off: In your ALTER statement, change idioma.id to idioma(id)

ALTER TABLE traducao_registro
  ADD CONSTRAINT FOREIGN KEY fk_traducao_registro_idioma (id_idioma)
  REFERENCES idioma(id); -- change here
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top