Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/01/2012, 21:22
Avatar de franblack
franblack
 
Fecha de Ingreso: noviembre-2008
Ubicación: Caracas
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Pregunta Llaves foraneas (FK) es posible actualizarlas sin actualizar la clave primaria?

Hola!
Buenas noches desde Venezuela!

Tengo una duda y despues de tanto leer y buscar en internet no consigo una forma o una respuesta...

El caso es que tengo 3 tablas... pais, estado, ciudad; cada una de ellas con una clave primaria.. ejemplo:

id pais
1...Venezuela
2...Argentina
3...Colombia
4...Brasil

id...estado...id_pais (fk)
1...DC...1
2...Zulia...1
4...Buenos Aires...2
5...Mendoza...2
7...Medellin...3
8...Cucuta...3
9...Sao Paulo...4
10...Rio de Janeiro...4


id...ciudad...id_ciudad
1...Ciudad 1 DC...1
2...Ciudad 2 DC...1
3...Ciudad 1 Zulia...2
4...Ciudad 2 Zulia...2
5...Cuidad 1 Buenos Aires...4
6...Ciudad 2 Buenos Aires...4
7...Ciudad 1 Mendoza...5
8...Ciudad 2 Mendoza...6
9...Ciudad 1 Medellin...7
10...Ciudad 2 Medellin...7


Estoy utilizando estas tablas para incorporar esta informacion a otra tabla CLIENTES... cuyos campos principales son:

IDCLiente
Nombre Cliente
Pais
Estado
Ciudad
Direccion

Esto lo hago con la finalidad de tener mayor control sobre la base de datos y evitar que existan 2 paises o estados/ciudades debido a que el usuario final escriba o digite erroneamente un pais/estado/ciudad, ejemplo: Buenos Aires y Bs As. En este caso tendria 2 registros repetidos en base de datos indicando el mismo lugar...

Al hacer un INSERT todo me trabaja a la perfeccion, inclusive al momento de buscar la información de la base de datos y mostrarla en el formulario...

Perooo.. tengo un gran problema, al momento de querer editar el campo ciudad dentro de la tabla cliente, me da el error de :

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


Mi pregunta es: Es posbible actualizar el valor de una llave foranea sin alterar la llave primaria?

Pues de despues de tanto leer pude comprender que las acciones de UPDATE CASCADE y DELETE CASCADE solo ocurren cuando se modifica el valor de la llave primaria y consecuentemente se AcTUALIZA o BORRA automaticamente el valor de las llaves foraneas....

He leido y he implementado en mi instruccion de php, lo siguiente:

SET FOREIGN_KEY_CHECKS = 0; --- que es desabilitar el chequeo de las llaves foraneas

luego ejecuto mi instruccion de UPDATE y luego de...

SET FOREIGN_KEY_CHECKS = 1; retorno a su estado orignal..

------- Realizando esto ultimo, me ingresa valores en la tabla, los puedo ver a traves de mysqlworkbench, pero a traves de mi pagina php no me muestra el registro -----

Agradezco desde ya, si alguien conociera alguna manera, si es que la hay, no pido que me coloquen el codigo ya hecho si es que lo hay, he leido bastante pero no ubico o no doy con la manera de actualizar una llave foranea, y que lo que pretendo hacer funcione...

Muchas gracias desde ya,

Por leer y Por su Tiempo!