[ Foro de SQL (y MySQL) ]

Filas de una tabla en espejo

02-May-2012 12:30
wenceslao velasco navarro
3 Respuestas

Ante todo muchas gracias por la atención, me gustaría saber si es posible en mysql poner dos filas en espejo, me explico, que los datos que se introduzcan en una de ellas automáticamente se copien en la otra y viceversa, es la única manera que tengo de hacer un modulo de reservas de pistas con antelaciones diferentes para diferentes clases de usuario.
Muchas gracias.


02-May-2012 12:50
Nacho Cabanes (+83)

Se me ocurren tres formas:

- La de "no complicarse" y que funcionará en cualquier sistema, es guardar los datos dos veces, con dos órdenes INSERT, cada uno en una tablas.

- La "elegante", que funcionará en versiones modernas de MySQL, es usar un TRIGGER, de modo que un proceso llame automáticamente al otro.

- La "buena", si hay información redundante, suele ser rediseñar, porque suele indicar que el diseño es mejorable (la información duplicada no sólo ocupa más, sino que también puede dar lugar a inconsistencias).


02-May-2012 16:05
wenceslao velasco navarro

Muchas gracias por contestar tan rapido. Me temo que modificar las tablas me va a resultar complicado ya que utilizo un script que viene todo configurado por defecto y se me escapa un poco tocar todo el sistema.
Respecto al trigger, se puede hacer dentro de una misma tabla?
saludos


03-May-2012 17:07
Nacho Cabanes (+83)

Los triggers no se hacen en la tabla sino desde el interfaz de comandos de MySQL (o desde algún "frontend" que te simplifique su manejo, como PhpMyAdmin).

Tienes las ideas básicas aquí

http://dev.mysql.com/doc/refman/5.0/es/triggers.html

y ejemplos un poco más detallados de su uso aquí:

http://dev.mysql.com/doc/refman/5.0/es/using-triggers.html

En tu caso sería un "CREATE TRIGGER xxx AFTER INSERT ON tabla1", para que se lance automáticamente tras cada inserción en la primera tabla.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)