Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Error 1005 150 al crear clave foránea foreign key
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Error 1005 150 al crear clave foránea foreign key

Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Error 1005 150 al crear clave foránea foreign key Responder citando

Estoy tratando de ejecutar la siguiente sentencia SQL en MySQL Server 5 para crear una clave foránea de la tabla "usuario", en el campo "codigocliente" a la tabla "cliente" en el campo "id", la consulta SQL que uso para ello es:

Código:

ALTER TABLE tabla_usuario
ADD CONSTRAINT FK_usuario_cliente
FOREIGN KEY FK_usuario_cliente (codigocliente)
    REFERENCES tabla_cliente (id)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
    ROW_FORMAT = DYNAMIC;


Pero al ejecutarla me da este error:

Error while executing query.

ALTER TABLE tabla_usuario
ADD CONSTRAINT FK_usuario_cliente
FOREIGN KEY FK_usuario_cliente (codigocliente)
REFERENCES tabla_cliente (id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
ROW_FORMAT = DYNAMIC;

MySQL Error Number 1005
Can't create table 'bdvisualizadorlog.#sql-61d_14d4' (errno: 150)


¿A qué puede ser debido? ¿MySQL Server 5 no admite claves foráneas?
MensajePublicado:
Mar Abr 26, 2011 8:36 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Error 1005 150 al crear clave foránea foreign key Responder citando



Anuncios



varios escribió:
Estoy tratando de ejecutar la siguiente sentencia SQL en MySQL Server 5 para crear una clave foránea de la tabla "usuario", en el campo "codigocliente" a la tabla "cliente" en el campo "id", la consulta SQL que uso para ello es:

Código:

ALTER TABLE tabla_usuario
ADD CONSTRAINT FK_usuario_cliente
FOREIGN KEY FK_usuario_cliente (codigocliente)
    REFERENCES tabla_cliente (id)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
    ROW_FORMAT = DYNAMIC;


Pero al ejecutarla me da este error:

Error while executing query.

ALTER TABLE tabla_usuario
ADD CONSTRAINT FK_usuario_cliente
FOREIGN KEY FK_usuario_cliente (codigocliente)
REFERENCES tabla_cliente (id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
ROW_FORMAT = DYNAMIC;

MySQL Error Number 1005
Can't create table 'bdvisualizadorlog.#sql-61d_14d4' (errno: 150)


¿A qué puede ser debido? ¿MySQL Server 5 no admite claves foráneas?


A partir de la versión 3.23.44 de MySQL Server ya están soportadas las claves foráneas o foreign keys.

El error que nos comentas puede ser debido a varios motivos:

1. Para poder usar las FOREIGN KEYS el motor (engine) debe ser InnoDB. Tanto la tabla origen como la foránea deben ser de tipo InnoDB. Asegúrate de esto.

Para convertir una tabla MyISAM a InnoDB puedes usar:

Código:

ALTER TABLE nombre_tabla ENGINE = InnoDB;



2. En las claves foráneas FOREIGN KEYS el campo seleccionado en la tabla origen y el campo de la tabla foránea deben ser del mismo tipo de datos.

3. Obviamente, tanto la tabla origen como la de destino (foránea) deben existir. También deben existir los campos origen y foráneo.
MensajePublicado:
Mar Abr 26, 2011 8:47 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Error 1005 150 al crear clave foránea foreign key Responder citando



Anuncios



alonsojpd escribió:
A partir de la versión 3.23.44 de MySQL Server ya están soportadas las claves foráneas o foreign keys.

El error que nos comentas puede ser debido a varios motivos:

1. Para poder usar las FOREIGN KEYS el motor (engine) debe ser InnoDB. Tanto la tabla origen como la foránea deben ser de tipo InnoDB. Asegúrate de esto.

Para convertir una tabla MyISAM a InnoDB puedes usar:

Código:

ALTER TABLE nombre_tabla ENGINE = InnoDB;



2. En las claves foráneas FOREIGN KEYS el campo seleccionado en la tabla origen y el campo de la tabla foránea deben ser del mismo tipo de datos.

3. Obviamente, tanto la tabla origen como la de destino (foránea) deben existir. También deben existir los campos origen y foráneo.



Lo cumplo todo salvo un pequeño detalle que no creo que sea: el campo "origen" en mi caso "codigocliente" de la tabla "origen" en mi caso "tabla_usuario" es de tipo INT(11), al igual que el campo "id" de la tabla foránea "tabla_cliente". Aunque veo una pequeña diferencia y es que en la tabla origen está marcado UNSIGNED y en la foránea no ¿puede ser esta "tontería"?
MensajePublicado:
Mar Abr 26, 2011 8:50 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Error 1005 150 al crear clave foránea foreign key Responder citando



Anuncios



varios escribió:
Lo cumplo todo salvo un pequeño detalle que no creo que sea: el campo "origen" en mi caso "codigocliente" de la tabla "origen" en mi caso "tabla_usuario" es de tipo INT(11), al igual que el campo "id" de la tabla foránea "tabla_cliente". Aunque veo una pequeña diferencia y es que en la tabla origen está marcado UNSIGNED y en la foránea no ¿puede ser esta "tontería"?


Sí, de hecho, de cara a MySQL el tipo de datos de los campos "codigocliente" y "id" que nos comentas no sería igual, uno es UNSIGNED y el otro no.

Para cambiar esto puedes ejecutar la siguiente consulta SQL:

Código:

ALTER TABLE tabla_usuario MODIFY COLUMN codigocliente INT(11) NOT NULL AUTO_INCREMENT;


Ejecútala también para la tabla "tabla_cliente" así te aseguras que en ambos casos es el mismo tipo:

Código:

ALTER TABLE tabla_cliente MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;


O bien, donde has visto el check de UNSIGNED marcado (si es en MySQL Administrator) lo desmarcas y guardas los cambios.

Cuando hayas dejado el mismo tipo de datos en ambos campos de ambas tablas vuelve a probar a ejecutar la consulta para crear la clave foránea.
MensajePublicado:
Mar Abr 26, 2011 8:56 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: [SOLUCIONADO] Error 1005 150 al crear foreign key Responder citando



Anuncios



alonsojpd escribió:

Sí, de hecho, de cara a MySQL el tipo de datos de los campos "codigocliente" y "id" que nos comentas no sería igual, uno es UNSIGNED y el otro no.

Para cambiar esto puedes ejecutar la siguiente consulta SQL:

Código:

ALTER TABLE tabla_usuario MODIFY COLUMN codigocliente INT(11) NOT NULL AUTO_INCREMENT;


Ejecútala también para la tabla "tabla_cliente" así te aseguras que en ambos casos es el mismo tipo:

Código:

ALTER TABLE tabla_cliente MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;


O bien, donde has visto el check de UNSIGNED marcado (si es en MySQL Administrator) lo desmarcas y guardas los cambios.

Cuando hayas dejado el mismo tipo de datos en ambos campos de ambas tablas vuelve a probar a ejecutar la consulta para crear la clave foránea.


Ok, efectivamente era el tipo de datos de ambos campos, ya está solucionado y funciona correctamente.

Muchas gracias.
MensajePublicado:
Mar Abr 26, 2011 8:57 am
Top of PageVer perfil de usuario
steveagente
Usuario


Registrado: Apr 08, 2013
Mensajes: 1

Asunto: Maestro!!!! Responder citando

Eres un genio maestro, gracias por darnos la solución ahora ya puedo relacionar mis tablas, mi problema era la diferencia del tipo de datos. nuevamente muchas gracias Maestro
MensajePublicado:
Lun Abr 08, 2013 4:22 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A