Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   modificar registros (https://www.clubdelphi.com/foros/showthread.php?t=68381)

yossi 10-06-2010 15:01:05

modificar registros
 
hola de nuevo, me podrian ayudar en esta duda que no tengo ni la menor idea de como solucionarla.

quisiera que en mi aplicacion el usuario pudiera modificar una clave primaria de una tabla y que a su vez es foranea en otras, pues quisiera que se propagara ese cambio, que cuando modifique la primaria se modifiquen todas las foraneas que coincidan con esa en las demas tablas

se podra?

delphi.com.ar 10-06-2010 15:52:37

Estas hablando de "Cascade Update", no lo soportan todos los motores. No es una práctica recomendable, lo recomendable es que el ID de la tabla sea un número autoincremental que identifique el registro, pero que no sea algo visible hacia el usuario final. Y en el caso de requerir una clave única, crear un campo con tal fin en la tabla Master, donde se verá reflejado el cambio en todas las consultas tablas Detail por la propia relación con Master.

Saludos!

yossi 10-06-2010 17:57:40

hola, gracias por el consejo pero obligatoriamente tengo que usar el "update on cascade" y no se como implementarlo, trabajo con mysql y con innoDB que se que lo soporta

maeyanes 10-06-2010 19:20:49

Hola...

Si lo soporta entonces debes poder hacer algo como:

Código SQL [-]
/* Está sintaxis es para Firebird, solo debes investigar la sintaxis para MySQL */
alter table Tabla 
add constraint ClaveForanea foreign key (Campo) 
references TablaReferenciada on (CampoForaneo) 
on update cascade;


Saludos...

yossi 10-06-2010 20:26:01

segun el manual de mysql las tablas InnoDB si aceptan claves foraneas y el ON CASCADE

lo hice con esta sentencia

Código SQL [-]
ALTER TABLE registros
ADD CONSTRAINT fk_personas_id 
FOREIGN KEY(personas_id)
REFERENCES personas (id)
ON DELETE NO ACTION
ON UPDATE CASCADE

pero solo me deja aplicarlo a una sola tabla, cuando trato de hacerlo con otra me salta el error #1005 - Can't create table 'mydb.#sql-898_26a' (errno: 121)

segun tengo entendido las tablas myISAM no aceptan claves foraneas pero si cambio el motro de la tabla a myisam no me da error pero tampoco actualiza en cascada

que hago? necesito que la clave primaria de personas sea foranea en 6 tablas y que estas se actualicen en cascada

maeyanes 10-06-2010 20:30:27

Hola...

Verifica que no estás tratando de usar el mismo nombre de clave foranea para todas las tablas, esto es, que no todas se llamen fk_personas_id.


Saludos...

yossi 11-06-2010 03:43:58

gracias maeyanes eso era.


La franja horaria es GMT +2. Ahora son las 16:49:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi