Ver Mensaje Individual
  #21 (permalink)  
Antiguo 09/02/2010, 16:07
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: FAQ's de MySQL

Pregunta: Como manejar transacciones en mysql?
Respuesta: Ver ejemplo

Código MySQL:
Ver original
  1. mysql> SELECT *FROM tabla1;
  2. +----------+---------+-----------------+
  3. | idextra1 | nombre1 | detalle1        |
  4. +----------+---------+-----------------+
  5. |        1 | daniel  | detalle daniel  |
  6. |        2 | daniela | detalle daniela |
  7. +----------+---------+-----------------+
  8. 2 rows IN SET (0.25 sec)
  9.  
  10. Query OK, 0 rows affected (0.00 sec)
  11.  
  12. mysql> INSERT INTO tabla1 VALUES(3,'salome','detalle salome');
  13. Query OK, 1 row affected (0.00 sec)
  14.  
  15. mysql> INSERT INTO tabla1 VALUES(4,'cristian','detalle cristian');
  16. Query OK, 1 row affected (0.00 sec)
  17.  
  18. mysql> SELECT *FROM tabla1;
  19. +----------+----------+------------------+
  20. | idextra1 | nombre1  | detalle1         |
  21. +----------+----------+------------------+
  22. |        1 | daniel   | detalle daniel   |
  23. |        2 | daniela  | detalle daniela  |
  24. |        3 | salome   | detalle salome   |
  25. |        4 | cristian | detalle cristian |
  26. +----------+----------+------------------+
  27. 4 rows IN SET (0.00 sec)
  28.  
  29. mysql> ROLLBACK;
  30. Query OK, 0 rows affected (0.00 sec)
  31.  
  32. mysql> SELECT *FROM tabla1;
  33. +----------+---------+-----------------+
  34. | idextra1 | nombre1 | detalle1        |
  35. +----------+---------+-----------------+
  36. |        1 | daniel  | detalle daniel  |
  37. |        2 | daniela | detalle daniela |
  38. +----------+---------+-----------------+
  39. 2 rows IN SET (0.00 sec)
  40.  
  41. Query OK, 0 rows affected (0.00 sec)
  42.  
  43. mysql> INSERT INTO tabla1 VALUES(3,'salome','detalle salome');
  44. Query OK, 1 row affected (0.00 sec)
  45.  
  46. mysql> savepoint a;
  47. Query OK, 0 rows affected (0.00 sec)
  48.  
  49. mysql> INSERT INTO tabla1 VALUES(4,'cristian','detalle cristian');
  50. Query OK, 1 row affected (0.00 sec)
  51.  
  52. mysql> rollback to a;
  53. Query OK, 0 rows affected (0.00 sec)
  54.  
  55. mysql> select *from tabla1;
  56. +----------+---------+-----------------+
  57. | idextra1 | nombre1 | detalle1        |
  58. +----------+---------+-----------------+
  59. |        1 | daniel  | detalle daniel  |
  60. |        2 | daniela | detalle daniela |
  61. |        3 | salome  | detalle salome  |
  62. +----------+---------+-----------------+
  63. 3 rows in set (0.00 sec)
  64.  
  65. mysql> SELECT *FROM tabla1;
  66. +----------+---------+-----------------+
  67. | idextra1 | nombre1 | detalle1        |
  68. +----------+---------+-----------------+
  69. |        1 | daniel  | detalle daniel  |
  70. |        2 | daniela | detalle daniela |
  71. +----------+---------+-----------------+
  72. 2 rows IN SET (0.25 sec)
  73.  
  74. Query OK, 0 rows affected (0.00 sec)
  75.  
  76. mysql> INSERT INTO tabla1 VALUES(3,'salome','detalle salome');
  77. Query OK, 1 row affected (0.00 sec)
  78.  
  79. mysql> INSERT INTO tabla1 VALUES(4,'cristian','detalle cristian');
  80. Query OK, 1 row affected (0.00 sec)
  81.  
  82. mysql> SELECT *FROM tabla1;
  83. +----------+----------+------------------+
  84. | idextra1 | nombre1  | detalle1         |
  85. +----------+----------+------------------+
  86. |        1 | daniel   | detalle daniel   |
  87. |        2 | daniela  | detalle daniela  |
  88. |        3 | salome   | detalle salome   |
  89. |        4 | cristian | detalle cristian |
  90. +----------+----------+------------------+
  91. 4 rows IN SET (0.00 sec)
  92.  
  93. mysql> commit;
  94. Query OK, 0 rows affected (0.00 sec)
  95.  
  96. mysql> SELECT *FROM tabla1;
  97. +----------+----------+------------------+
  98. | idextra1 | nombre1  | detalle1         |
  99. +----------+----------+------------------+
  100. |        1 | daniel   | detalle daniel   |
  101. |        2 | daniela  | detalle daniela  |
  102. |        3 | salome   | detalle salome   |
  103. |        4 | cristian | detalle cristian |
  104. +----------+----------+------------------+
  105. 4 rows IN SET (0.00 sec)
Explicación

Después de iniciada una transacción se pueden realizar 3 acciones:
Commit -> Confirmar cambios definitivos. (Esto termina la transacción)
savepoint -> Confirmar hasta cierto punto de los procesos sin finalizar la transacción.
rollback -> Deshacer cambios desde el inicio de la transacción. (Esto también finaliza la transacción)

Como se muestra en el ejemplo, también se puede hacer rollback hasta el ultimo savepoint guardado.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 09/02/2010 a las 20:41