transaciones en MySQL
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.
El hecho de no poder hacer transacciones se soluciona haciendo bloqueos en las tablas.
Espero que esto te ayude.
Saludos.
si amigo, en otras versiones posteriores si aparece y he leido un poco sobre estas cosas y creo que pueden ser muy utiles
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
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
yo utilizo la version 4.1, pero buscaré información sobre los bloqueos de tablas.
Saludos
Saludos
'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
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
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)
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)
