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
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?
*********