Error #1005 – Can’t create table… en MySQL al intentar crear una relacion 1-M

Logo MySQL
Estaba intentando hacer una relacion (unos a muchos 1-M) en una base de datos en MySQL ya existente y recibia este error: #1005 - Can't create table 'table_name.#sql-344_126' (errno: 121)
La razon es que tenia varios asuntos sin resolver:
El campo a ser utilizado en la relacion tiene que ser llave primaria o indice (primary key or index).
Ambas tablas tienen que ser Engine InnoDB, para modificar una tabla existente puedes utilizar el siguente commando:
SQL:
-
ALTER TABLE 'table_name' ENGINE = InnoDB;
Para alterar una tabla ya existente, creando asi la relacion:
SQL:
-
ALTER TABLE usuarios
-
ADD CONSTRAINT country_id
-
FOREIGN KEY (country_id)
-
REFERENCES countries (country_id)
-
ON DELETE CASCADE ON UPDATE CASCADE
Pueden conseguir mas informacion en este blog: MySQL Error Number 1005 Can’t create table ‘.\mydb\#sql-328_45.frm’ (errno: 150)
Por si le sirve a alguien:
Yo me he estado volviendo loco con el mismo problema, el TIPO DE DATO era idéntico. en ambos casos era un VARCHAR(36) que utilizo para almacenar como claves primarias un UUID estándar en formato “string”.
Sin embargo al ser texto, tienen asociado un “código de caracteres” y una tabla se creó con el tenía el charset con “UTF” y otra con el “LATIN”.
No enlazaban por eso.
Cambiando el charset para ser todo coherente (ambos a utf8 o ambos a latin) ya me dejó crear la FOREIGN KEY sin el error del “can’t create table…”