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)