transaciones en MySQL

fandelweb
28 de Diciembre del 2004
¿es posible hacer transacciones en MySQL?

axmug
28 de Diciembre del 2004
En la versión que yo utilizo, que es la 3.23.52 no es posible hacer transacciones, y por tanto, en versiones anteriores tampoco. No sé si en versiones posteriores es posible.

El hecho de no poder hacer transacciones se soluciona haciendo bloqueos en las tablas.

Espero que esto te ayude.

Saludos.

fandelweb
28 de Diciembre del 2004
si amigo, en otras versiones posteriores si aparece y he leido un poco sobre estas cosas y creo que pueden ser muy utiles

Farid A. Bielma lopez
28 de Diciembre del 2004
Desde la version 4 ya se puede.

Ahora esta la version 5 beta, pronto se realizara el release tiene nuevas caracteristicas muy interesantes como vistas y procedimientos almacenados, entre otras. En la pagina oficial http://www.mysql.com se detalla con mayor claridad esto.

Saludos,
Farid
http://farid-darkground.iespana.es

fandelweb
28 de Diciembre del 2004
yo utilizo la version 4.1, pero buscaré información sobre los bloqueos de tablas.

Saludos

RBalcazar
28 de Diciembre del 2004
'Este codgo lo use en una aplicacion en la que nos pedian el manejo de transacciones, actualmente le voy a agregar el manejo de concurrencias

Private Sub cmdSqlAdd_Click()
On Error GoTo TransErr
'Cuando se genera un error ira a la etiqueta llamada TransErr y ejecutara el codigo que ahi pongamos, lo ideal es manejar ahi el RollBack para deshacer los cambios

conn.BeginTrans 'iniciamos la Transaccion
MsgBox "Transaccion Iniciada", vbOKOnly, "Estado de la transacción"

conn.Execute "INSERT INTO Cliente(IDCliente,Nombre,Direccion,Telefono,RFC) values('" & Text1 & "','" & Text2 & "','" & Text3 & "','" & Text5 & "','" & Text6 & "')", , adExecuteNoRecords

'Ejecutamos las instrucciones que necesitamos, si en esta parte se genera un error cualquiera que sea entonces se ira a la parte de TransErr, si no se hara un commit y los cambios seran aceptados

conn.CommitTrans
MsgBox "Transaccion Cometida", vbOKOnly, "Estado de la transacción"
End If
Exit Sub 'Este es importante porque si no estuviera entonces se seguirian ejecutando las lineas de abajo

TransErr:
conn.RollbackTrans
MsgBox "Transaccion Fallada", vbOKOnly, "Estado de la transacción"
End Sub

RBalcazar
28 de Diciembre del 2004
El servidor de bases de datos MySQL soporta distintos tipos de tablas, tales como ISAM, MyISAM, InnoDB, y DBD (Berkeley Database). De éstos, InnoDB es el tipo de tabla más importante (después del tipo predeterminado, MyISAM), y merece una atención especial.

Las tablas del tipo InnoDB están estructuradas de forma distinta que MyISAM, ya que se almacenan en un sólo archivo en lugar de tres, y sus principales características son que permite trabajar con transacciones, y definir reglas de integridad referencial.

Para crear una tabla InnoDB, procedemos con el código SQL estándar CREATE TABLE, pero debemos especificar que se trata de una tabla del tipo InnoDB (TYPE= InnoDB). Esto es aplicable a cualquier tipo de tabla, pero cuando no se especifica nada, MySQL supone que se trata de una tabla MyISAM.

CREATE TABLE innotest (campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB;

mysql> INSERT INTO innotest VALUES(1);
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO innotest VALUES(2);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO innotest VALUES(3);
Query OK, 1 row affected (0.04 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)

Ahora veamos como usar transacciones.

mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------+
4 rows in set (0.00 sec)

Si en este momento ejecutamos un ROLLBACK, la transacción no será completada, y los cambios realizados sobre la tabla no tendrán efecto.

mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)