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 1216 MySQL al guardar foreign key constraint fail
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Error 1216 MySQL al guardar foreign key constraint fail

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 1216 MySQL al guardar foreign key constraint fail Responder citando

Cuando intento guardar un registro en la una tabla me aparece este error de MySQL:

The MySQL Server returned this Error:
MySQL Error Nr. 1216 - Cannot add or update a child row: a foreign key constraint fails


La consulta SQL que ejecuto para guardar es:

Código:

insert into cliente value ('000001', 'Cliente de pruebas', '000001')



y la estructura de la tabla "cliente":

Código:

CREATE TABLE cliente (
  codigo varchar(6) NOT NULL default '',
  nombre varchar(80) NOT NULL,

  ...

  codigoformapago varchar(6) default NULL,
  PRIMARY KEY  (codigo),
  KEY cf_cliente_formapago (codigoformapago),
  CONSTRAINT cf_cliente_formapago FOREIGN KEY (codigoformapago)
    REFERENCES formapago (codigo)
)


¿a qué se puede deber?
MensajePublicado:
Mie Mar 07, 2007 1:31 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Error 1216 MySQL al guardar foreign key constraint fail Responder citando



Anuncios



La consulta SQL que intentas ejecutar incumple las reglas de integridad referencial establecidas en la creación de las tablas implicadas. Es decir, no puedes eliminar o insertar un registro en una tabla si ésta tiene una regla de integridad referencial que lo impida si no cumple las condiciones.

Pongamos un ejemplo para entenderlo mejor:

Si creamos estas dos tablas (una relacionada con la otra por una CONSTRAINT):

Código:

create table formapago
(
  codigo varchar(6) primary key,
  nombre varchar(30) not null
)


y

Código:

CREATE TABLE cliente (
  codigo varchar(6) NOT NULL default '',
  nombre varchar(80) NOT NULL,
  codigoformapago varchar(6) default NULL,
  PRIMARY KEY  (codigo),
  KEY cf_cliente_formapago (codigoformapago),
  CONSTRAINT cf_cliente_formapago FOREIGN KEY (codigoformapago)
    REFERENCES formapago (codigo)
)



creándolas en este orden, pues la creación de la tabla "cliente" necesita que exista la tabla "formapago".

Y añadimos algún registro a la tabla cliente con:

Código:

insert into cliente value ('000001', 'Cliente de pruebas', null)


no habría problema, pero si lo añadimos con un valor en "codigoformapago":

Código:

insert into cliente value ('000001', 'Cliente de pruebas', '000001')


dará el error:

SQL Error: Cannot add or update a child row: a foreign key constraint fails.

este error es debido a que no existe ningún registro en la tabla "formapago" con código "000001", pues la CONSTRAINT "cf_cliente_formapago" no permite que se cree un registro en la tabla "cliente" con valor en "codigoformapago" inexistente en la tabla "formapago".

Si creamos un registro en "formapago" con código "000001":

Código:

insert into formapago value ('000001', 'Contado')


sí que permitiría ejecutar la consulta:

Código:

insert into cliente value ('000001', 'Cliente de pruebas', '000001')
MensajePublicado:
Mie Mar 07, 2007 2:09 pm
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