O.T. MariaDB y Set autocommit=0 ,START TRANSACTION, BEGIN

925 views
Skip to first unread message

Arnaldo Toledano

unread,
Nov 21, 2016, 12:53:23 PM11/21/16
to publice...@googlegroups.com
Mientras mas leo, mas me confundo.

1.- Lo que interpreto es que por defecto autocommit esta en 1.
lo que hace que una vez terminada una grabación de datos, estos son
reflejados de manera
inmediata en la base de datos.
Por lo tanto las bases de datos transaccionales NO FUNCIONAN como tales
ante este esquema.

2.- Si autocommit esta en 0, comienza a funcionar las bases de datos
transaccionales.
Puesto que el CICLO no se cierra hasta que aparezca un COMMIT.

3.- Al terminar una operación de grabado satisfactoriamente coloco
COMMIT y se graba todo.

A continuación debo colocar AUTOCOMMIT = 1 ???
O de manera automática vuelve a automit=1 ???

Segunda parte.

1.- Start Transaction.
Para que sirve ???
Es necesario colocarlo después del set autocommit.
cuando cierro la operación con COMMIT, es necesario colocar END
TRANSACTION ???

Tercera Parte.
1.- BEGIN.
Interpreto que bloque las filas para InnoDB y bloque Tablas para MyISAM.
Interpreto que es util para cuando hay movimientos concurrentes.
De esta manera hasta NO TERMINAR un movimiento no libero para que otro
usuario realice modificaciones.


Cuarta parte.

Por ultimo
Después de ROLLBACK, es necesario setear nuevamente el AUTOCOMMIT o este
vuelve al estado por defecto.


Otro tema que he leído y no me queda claro, es que si AUTOCOMMIT esta
por ejemplo en 3, se ejecuta el COMMIT en la
tercera operación.
Es correcto ???



Arnaldo Toledano

El DESPISTADO con tablas transaccionales.



Antonio Meza

unread,
Nov 21, 2016, 2:36:16 PM11/21/16
to Comunidad de Visual Foxpro en Español
Te comento!!

Start Transaction inicia una transacción en el servidor, no importa el valor que tenga AutoCommit, y debes usar Commit o Rollback para finalizar las transacción iniciada con Start Transaction.

No te compliques, usa solamente Start Transaction y olvídate de AutoCommit, así lo uso con FoxyDb.

Solo debes tener bien claro que a VFP también le debes indicar como usaras las transacciones desde ODBC, por lo tanto es importante que una vez que te conectas al servidor de Mysql o MariaDb o cualquier otro debes indicarle que usaras transacciones manuales.

* Habilitar Transacciones Manuales en VFP
SQLSETPROP(this.handle, 'Transactions', 2)

saludos
Antonio Meza

HernanCano

unread,
Nov 21, 2016, 4:22:47 PM11/21/16
to Comunidad de Visual Foxpro en Español
Se refiere al mismo tema.

Debiste escribir sobre el mismo tema: no debes abrir otro para lo mismo.

Aclaración:
No se dice:
>>> ... Si autocommit esta en 0, comienza a funcionar las bases de datos 
>>> transaccionales. 
>>> Puesto que el CICLO no se cierra hasta que aparezca un COMMIT. 

Sí se dice:

1. MySQL usa transacciones automáticas por cada INSERT/UPDATE/DELETE que se ejecute, lo que significa que cuando se hace un INSERT/UPDATE/DELETE él ejecuta internamnente un BEGIN TRANSACTION, y al terminar el COMMIT (ó ROLLBACK de ser necesario). "Automático" significa que el programador no necesita iniciar la transacción ni finalizarla. Eso es lo que hace seguro un motor de base de datos.

2. Cuando queremos habilitar transacciones manuales, ejecutamos BEGIN TRANSACTION y COMMIT (ó ROLLBACK de ser necesario) por nosotros mismos. "Manual" significa que el programador sí necesita iniciar la transacción y también finalizarla.

Ahora:
Un buen programador ---con lo expresado hasta ahora--- se preguntará: ¿Qué ventaja hay de yo (el programador) ejecutar BEGIN TRANSACTION y COMMIT (ó ROLLBACK) si el motor ya disponde de las "transacciones automáticas"?

La respuesta es: las transacciones automáticas funcionan sobre un comando unitario.... es decir sobre el INSERT que le aplicamos al encabezado de las facturas ---POR EJEMPLO---; en cambio sobre el INSERT que le aplicamos al DETALLE de las facturas se aplicaría otra transacción diferente.------------>>>>>> PERO NOSOTROS NECESITAMOS que los dos INSERT (y/o otros comandos) se ejecuten dentro de una misma transacción............. ............ ..................... ..................... .......................... .......................... ...............

A éso es a lo que se le conoce como TRANSACCION MANUAL.

Entonces:
Un buen programador pensará: Prefiero desactivar las transacciones automáticas y activarlas por mí mismo.

Aquí es donde entra el comando AUTOCOMMIT:

** confirma la sintaxis correcta en el motor que uses
SET AUTOCOMMIT = 0
BEGIN TRANSACTION
  INSERT ...

¿Te vuelvo a explicar?

El SET AUTOCOMMIT=0 desactiva las transacciones automáticas.
El BEGIN TRANSACTION (o quizá START TRANSACTION) inicia la transacción manual.
Los varios INSERT/UPDATE/DELETE hacen lo que necesitamos.
El END TRANSACTION/COMMIT (ó ROLLBACK) finaliza la transacción manual.
El SET AUTOCOMMIT=1 reactiva las transacciones automáticas para que el motor funcione como mejor lo pueda hacer cuando ejecutemos una sentencia SQL unitaria.

Ahora:
No es obligatorio ni imperativo ejecutar SET AUTOCOMMIT=0 cuando vas a hacer BEGIN TRANSACTION (observa lo que te dice Antonio). Aquí decimos el clásico: "todo es cuestión de gustos".
 
Lo que te explico lo leí de 

Te recomiendo leer esa URL antes de consultar, pues encontrarás mucho en Internet que te aporta.

No se dice:
>>> ... Si autocommit esta en 0, comienza a funcionar las bases de datos 
>>> transaccionales. 
>>> Puesto que el CICLO no se cierra hasta que aparezca un COMMIT. 

Se dice: Cuando AUTOCOMMIT está en 0, desactivamos las transacciones automáticas porque queremos activar las transacciones manuales.
La transacción no termina hasta que aparezca un COMMIT. 

**********

¿Qué sigue? ¿Abrir otra pregunta para continuar con el mismo tema?

*********
Reply all
Reply to author
Forward
0 new messages