La respuesta a su pregunta depende de si está o no dentro de una transacción que abarcará más de un estado de cuenta. (Ha etiquetado la pregunta con InnoDB, la respuesta sería diferente con MyISAM).
Del manual de referencia: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Por defecto, MySQL se ejecuta con el modo de confirmación automática habilitado. Esto significa que tan pronto como ejecuta una instrucción que actualiza (modifica) una tabla, MySQL almacena la actualización en el disco para que sea permanente.
Entonces, sí, de manera predeterminada, si solo está usando INSERT
, los registros que inserte se confirmarán, y no tiene sentido intentar revertirlos. (Esto es efectivamente lo mismo que envolver cada declaración entre BEGIN
y COMMIT
.)
Sin embargo, si se trata de transacciones explícitamente, tendrá que usar COMMIT
para confirmar almacenar los registros, pero también podrá usar ROLLBACK
.
Puede iniciar una transacción explícitamente usando START TRANSACTION
(o BEGIN
). Esto es independiente de la autocommit
configuración (activada de forma predeterminada):
Con START TRANSACTION, la confirmación automática permanece deshabilitada hasta que finalice la transacción con COMMIT o ROLLBACK. El modo de confirmación automática vuelve a su estado anterior.
Alternativamente, si autocommit=0
, creo que cualquier declaración después de otro final de la transacción, comenzará una transacción (pero aún puede usarla START TRANSACTION
explícitamente); esa es al menos la forma en que interpreto esto :
El modo de confirmación automática. Si se establece en 1, todos los cambios en una tabla surten efecto inmediatamente. Si se establece en 0, debe usar COMMIT para aceptar una transacción o ROLLBACK para cancelarla. Si la confirmación automática es 0 y la cambia a 1, MySQL realiza un COMPROMISO automático de cualquier transacción abierta. Otra forma de comenzar una transacción es usar una instrucción START TRANSACTION o BEGIN. Consulte la Sección 12.3.1, “INICIAR TRANSACCIÓN, COMPROMISO y Sintaxis ROLLBACK”
Más específicamente, "otra forma de comenzar una transacción" parece implicar que establecer "autocommit = 0" es suficiente para iniciar una transacción (al menos justo antes de cada declaración al inicio de una sesión o que sigue a COMMIT
/ ROLLBACK
). Sugeriría usar de manera explícita BEGIN
o de START TRANSACTION
todos modos, incluso si es así autocommit=0
, ya que puede ser más claro ver cuándo comienza o termina la transacción.
(La forma en que inicia una transacción puede depender de la forma en que su aplicación usa MySQL).