Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] no puedo actualizar la clave foranea

Estas en el tema de no puedo actualizar la clave foranea en el foro de Mysql en Foros del Web. hola a todos, espero me puedan ayudar con este inconveniente, tengo una base de datos en la que tengo la tabla telas. Campo Tipo Nulo ...
  #1 (permalink)  
Antiguo 04/08/2013, 10:33
 
Fecha de Ingreso: julio-2013
Ubicación: pereira
Mensajes: 10
Antigüedad: 11 años, 4 meses
Puntos: 0
Exclamación no puedo actualizar la clave foranea

hola a todos, espero me puedan ayudar con este inconveniente, tengo una base de datos en la que tengo la tabla telas.
Campo Tipo Nulo Predeterminado
id_tela int(8) No
referencia varchar(15) No
tipo varchar(25) No
proveedor varchar(20) No
num_factura varchar(15) No
fecha_ingreso date No
ubicacion varchar(25) No
valor_metro int(8 ) No

y la tabla rollos telas

Campo Tipo Nulo Predeterminado
id_tela int(8) No
num_rollo varchar(10) No
metros int(3) No
color varchar(15) No
cod_color varchar(7) No
id_rollo_telas int(8) No

la llave primaria de telas(id_telas), que es autincrement, es la llave foranea de rollos telas, las tablas son innodb,en rollos telas tengo como llave primaria id_rollos_telas que tambien es autoincrement, uso mysql 5.1.41, phpmyadmin 3.2.4 y lo que quiero hacer es que al ingresar los datos en telas,el valor de la llave primaria se actualice en rollos telas donde es llave foranea, lo estoy haciendo de la siguiente manera, por medio de un formulario ingreso los datos en telas, de hay me lleva a otro formularioen donde ingreso rollos pero nesecito que me conserve el mismo id tela para todos los rollos que quiera ingresar, pues esa esi como se que rollos pertenecen a que tela, al hacerlo me aparece el siguiente error: Error: Cannot add or update a child row: a foreign key constraint fails (`sipco`.`rollos_telas`, CONSTRAINT `rollos_telas_ibfk_1` FOREIGN KEY (`id_tela`) REFERENCES `telas` (`id_tela`) ON DELETE CASCADE ON UPDATE CASCADE). tal parece que estoy queriendo ingresar algo que no existe pero no deberia de conservar el mismo id_telas con el autoincrement de id_rollos_telas??? ayuda por favor y gracias de antemanno por tomarse su tiempo.
  #2 (permalink)  
Antiguo 04/08/2013, 10:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: no puedo actualizar la clave foranea

Deberías tratar de escribir con untos aparte y en párrafos, cosa de que el texto sea entendible... Así como lo escribes resulta difícil de comprender lo que describes.

No queda suficientemente caro si al momento de ingresar el nuevo tipo de tela estás recuperando el valor generado del autoincrement correspondiente a su clave, para luego usarlo en el insert del rollo.
¿Lo estás haciendo o no?

Debo asumir que sabes que esa tarea no se hace en forma automática. Si no pones específicamente el valor recuperado de la PK como FK en rollo, el sistema no lo hará.

Lo que MySQL te dice es, concretamente que, el valor que pones no existe en la tabla referida, por ende no estás cumpliendo con la restricción.
El ON UPDATE CASCADE sólo opera para los registros ya existentes en las tablas, para aquellos casos que a posteriori de su alta, se modifica el valor de PK inicial. Pero no para las altas nuevas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/08/2013, 11:25
 
Fecha de Ingreso: julio-2013
Ubicación: pereira
Mensajes: 10
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: no puedo actualizar la clave foranea

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Deberías tratar de escribir con untos aparte y en párrafos, cosa de que el texto sea entendible... Así como lo escribes resulta difícil de comprender lo que describes.

No queda suficientemente caro si al momento de ingresar el nuevo tipo de tela estás recuperando el valor generado del autoincrement correspondiente a su clave, para luego usarlo en el insert del rollo.
¿Lo estás haciendo o no?

Debo asumir que sabes que esa tarea no se hace en forma automática. Si no pones específicamente el valor recuperado de la PK como FK en rollo, el sistema no lo hará.

Lo que MySQL te dice es, concretamente que, el valor que pones no existe en la tabla referida, por ende no estás cumpliendo con la restricción.
El ON UPDATE CASCADE sólo opera para los registros ya existentes en las tablas, para aquellos casos que a posteriori de su alta, se modifica el valor de PK inicial. Pero no para las altas nuevas.

ok perdon por el enrredo, lo que intento es lo siguiente: un tipo de tela tiene muchos rollos y hay muchos tipos de telas; entonces quiero que al ingresar una clase de tela pueda conservar ese id de tela para los rollos que le corresponden, lo que me dices es que debo especificar el el php que al ingresar rollos telas el id_telas de rollos sea igual al de telas??.

soy nuevo en esto y estoy aprendiendo por mi mismo. gracias por tu tiempo.
  #4 (permalink)  
Antiguo 04/08/2013, 11:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: no puedo actualizar la clave foranea

Cita:
lo que me dices es que debo especificar el el php que al ingresar rollos telas el id_telas de rollos sea igual al de telas
Exactamente ese es el sentido de una FK...
La id_telas en rollos_temas es una FK que indica a qué tipo de tela corresponde el rollo. COmo FK que es, hace referencia a la PK correspondiente de la tabla "telas".
En consecuencia el proceso es:
1) Das el alta de la tela en TELAS.
2) Recuperas el valor generado para la nueva tela.
3) Lo insertas en la tabla ROLLOS_TELAS como FK en la columna correspondiente.

Todo esto no tiene nada que ver con PHP, es bases de datos. En PHP o cualquier otro lenguaje que use BBDD cumples con la misma lógica, porque no hay "automatismos" en este sentido. MySQL no hará por tí nada que no le digas que haga. Y es el programador el que tiene que respetar las dependencias de FK/PK, o de lo contrario MySQL no le permitirá hacer esas inserciones.
Lo que el DBMS hace (y para lo que se crean estas restricciones) es evitar que el programador meta la para y destruya la consistencia e integridad referencial
¿Se entiende?

Ahora te toca a tí, en el leguaje que sea (off topic de este foro), ver cómo implementar esa lógica.

En el foro de PHP vas a encontrar muchísimos ejemplos de cómo se hace. Usa el buscador del foro para encontrarlos, y en todo caso lee las FAQs de ese foro. También hay ejemplos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/08/2013, 12:14
 
Fecha de Ingreso: julio-2013
Ubicación: pereira
Mensajes: 10
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: no puedo actualizar la clave foranea

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Exactamente ese es el sentido de una FK...
La id_telas en rollos_temas es una FK que indica a qué tipo de tela corresponde el rollo. COmo FK que es, hace referencia a la PK correspondiente de la tabla "telas".
En consecuencia el proceso es:
1) Das el alta de la tela en TELAS.
2) Recuperas el valor generado para la nueva tela.
3) Lo insertas en la tabla ROLLOS_TELAS como FK en la columna correspondiente.

Todo esto no tiene nada que ver con PHP, es bases de datos. En PHP o cualquier otro lenguaje que use BBDD cumples con la misma lógica, porque no hay "automatismos" en este sentido. MySQL no hará por tí nada que no le digas que haga. Y es el programador el que tiene que respetar las dependencias de FK/PK, o de lo contrario MySQL no le permitirá hacer esas inserciones.
Lo que el DBMS hace (y para lo que se crean estas restricciones) es evitar que el programador meta la para y destruya la consistencia e integridad referencial
¿Se entiende?

Ahora te toca a tí, en el leguaje que sea (off topic de este foro), ver cómo implementar esa lógica.

En el foro de PHP vas a encontrar muchísimos ejemplos de cómo se hace. Usa el buscador del foro para encontrarlos, y en todo caso lee las FAQs de ese foro. También hay ejemplos.
ok gnzsoloyo, te entendi perfectamente, gracias por tu tiempo y aporte.

Etiquetas: campo, clave, php, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:21.