Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Hadess_inf en 14 Agosto 2009, 21:52 pm



Título: Transacciones cuando y en que caso usarlas.
Publicado por: Hadess_inf en 14 Agosto 2009, 21:52 pm
Hola a todos, pues estuve informandome sobre transacciones en Mysql y PHP. Y queria preguntar si alguien me puediese decir en que situaciones se usan estas. Casos practicos y demas. Gracias.

Edito: Algo como esto (http://elcodiguero.com/php/28-transacciones-en-mysql).


Título: Re: Transacciones cuando y en que caso usarlas.
Publicado por: ^Tifa^ en 17 Agosto 2009, 20:59 pm
Pues las transacciones se utilizan como te especifico esa web, cuando reconozcas que varios usuarios tienen acceso a la misma tabla o tablas de una DB y que dicho usuarios puedan eliminar o actualizar datos. Lo cual puede ocasionar debido al autocommit activado por defecto en MySQL que si usuario A hace un delete de una fila completa por ejemplo y usuario B 2 segundos despues solicita informacion que en esa tabla fue eliminada... no la encuentra y devuelve error, o si usuario A actualiza un registro a cierto valor y usuario B actualiza el mismo registro por otro valor en los segundos siguientes ocurre problemas ya que usuario A estara buscando luego ese valor acorde al registro que este coloco....

Entonces en casos exclusivos como estos, se utiliza el unico motor hazta la fecha transaccional y ACID compatible que tiene MySQL (Pero que realmente pertenece a Oracle) el gran InnoDB. Con InnoDB puedes relacionar una tabla con otra usando llaves foraneas (Asi te evitas tener que crear quien sabe cuantos disipadores (triggers) y controlar algo manualmente cuando puede ser automatico como con el motor InnoDB) con este motor y usando llaves foraneas declaras a una de las tablas como padre y las otras como hijos... de acuerdo a las condiciones que hayas dado a las tablas hijos al relacionar la llave foranea a su padre (ejemplo: On delete cascade o on update cascade etc..) se aplicara el cambio en las tablas padres / hijos a la vez.

Ahora, si tu lo que tienes es un formulario de registro de usuarios, o un libro de visitas, o una web de ventas de articulos o algo asi donde 1 usuario tenga acceso solo a sus datos especificos mas no a modificar lo de otros.. entonces utilizas Myisam (Ya que InnoDB por la funcionalidad ACID que implementa ocupa mas espacio del HD y sus consultas tardan un poco mas en devolver aun pasando tunning de indices... ha mejorado bastante la velocidad en la version de MySQL 5.4 gracias a la mano de billetes que Oracle ha comenzado a ingresar al proyecto MySQL y al funcionamiento de InnoDB en esta...) Si tienes algo de recuerdo digase un foro con datos antiguos que no se actualizan, ni eliminan nada o no insertan lo que sea... puedes guardar esa tabla en un motor Archive que consume un 60% menos de HD que MyIsam y Myisam consume un 50% menos de HD que InnoDB.

InnoDB deberia ser utilizado para casos exclusivos en los que se te presente necesidad de actualizaciones masivas o eliminaciones masivas o que varios usuarios tengan acceso a varios datos y puedan hacer cosas (llamese cambios internos) y tu no desees rompimientos de datos.