BEGIN — iniciar un bloque de transacción
BEGIN [ WORK | TRANSACTION ] [transaction_mode[, ...] ] dondetransaction_modees uno de: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE
BEGIN inicia un bloque de transacción, es decir,
todas las instrucciones después de un comando BEGIN se
ejecutarán en una única transacción hasta que se indique explícitamente un COMMIT o un ROLLBACK.
Por defecto (sin BEGIN),
PostgreSQL ejecuta
las transacciones en modo “autocommit” (confirmación automática), es decir, cada
instrucción se ejecuta en su propia transacción y se realiza una confirmación
implícita al final de la instrucción (si la ejecución fue
exitosa; de lo contrario, se realiza una reversión).
Las instrucciones se ejecutan más rápidamente en un bloque de transacción, porque el inicio/confirmación de una transacción requiere una actividad significativa de CPU y disco. La ejecución de múltiples instrucciones dentro de una transacción también es útil para garantizar la consistencia al realizar varios cambios relacionados: otras sesiones no podrán ver los estados intermedios en los que no se han realizado todas las actualizaciones relacionadas.
Si se especifica el nivel de aislamiento (isolation level), el modo lectura/escritura (read/write mode) o el modo diferible (deferrable mode), la nueva
transacción tendrá esas características, como si se hubiera ejecutado
SET TRANSACTION.
WORKTRANSACTIONPalabras clave opcionales. No tienen ningún efecto.
Consulta SET TRANSACTION para obtener información sobre el significado de los demás parámetros de esta instrucción.
START TRANSACTION tiene la misma funcionalidad
que BEGIN.
Usa COMMIT o
ROLLBACK
para terminar un bloque de transacción.
Ejecutar BEGIN cuando ya estás dentro de un bloque de transacción
provocará un mensaje de advertencia. El estado de la transacción no se verá afectado.
Para anidar transacciones dentro de un bloque de transacción, usa puntos de guardado (savepoints)
(consulta SAVEPOINT).
Por razones de compatibilidad hacia atrás, se pueden omitir las comas entre
transaction_modes sucesivos.
Para iniciar un bloque de transacción:
BEGIN;
BEGIN es una extensión de lenguaje de PostgreSQL.
Es equivalente al comando estándar SQL
START TRANSACTION, cuya página de referencia
contiene información de compatibilidad adicional.
El transaction_mode DEFERRABLE
es una extensión de lenguaje de PostgreSQL.
Por cierto, la palabra clave BEGIN se utiliza para un
propósito diferente en SQL embebido. Te aconsejamos tener cuidado
con la semántica de las transacciones al portar aplicaciones de bases de datos.