# data[].attributes.body
SQL tiene una variable de entorno llamada autocommit, que por defecto tiene el valor 1. Configurado de esta manera no se pueden usar transacciones, porque SQL automáticamente hace un COMMIT luego de cada consulta.

Para usar transacciones entonces, hay que poner autocommit a 0 (desactivarlo).

# data[].attributes.body
Usar transacciones es muy simple: antes de ejecutar la primer consulta, se ejecuta una que solamente contiene BEGIN. Luego se ejecutan las consultas que deban ejecutarse. Si éstas resultan exitosas, se termina la transacción con COMMIT, lo cual provoca que los cambios hechos por las consultas anteriores sean permanentes. Si las consultas fallan en algún paso, se puede volver al estado anterior al comienzo de la transacción ejecutando ROLLBACK

Aunque los datos no sean realmente escritos a la o las tablas involucradas hasta ejecutar el COMMIT, las consultas devuelven lo mismo que si lo fueran, es decir, para saber si una consulta falló basta con ver el valor de retorno de mysql_query y para ver el número de filas afectadas sigue valiendo usar mysql_num_rows

Mientras la transacción está ejecutándose, los datos (en el caso de InnoDB las filas y en el caso de MyISAM las tablas) afectados quedan bloqueados, nadie puede acceder a ellos. Cualquier consulta que tenga que ver con los mismos datos será demorada hasta que la transacción termine. Esto implica que usar transacciones es un poco más lento que no usarlas, pero a la vez implica que los datos involucrados no pueden ser modificados por otra copia de la aplicación, y por lo tanto se evita la situación planteada al principio como ejemplo.

# data[].attributes.body
Atomicidad. Es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.

Consistencia. Esta propiedad esta ligada a la integridad referencial, es decir solo se pueden escribir datos válidos respetando los tipos de datos declarados y la integridad referencial.

Aislamiento. Asegura que una operación no puede afectar a otras. Con esto se asegura que varias transacciones sobre la misma información sean independientes y no generen ningún tipo de error.

Durabilidad. Cuando se completa una transacción con éxito los cambios se vuelven permanentes.

# data[].attributes.body
Cada transacción puede verse como una función, y dentro de ella puede haber tantas instrucciones como sea necesario.

En este caso tenemos dos sentencias, cada una de ellas para editar un registro, MySQL las evalúa y las guarda en un estado temporal y posteriormente son ejecutadas o desechadas con los comandos COMMIT o ROLLBACK.

# data[].attributes.body
Las transacciones de bases de datos permiten agrupar sentencias (por ejemplo SQL) en bloques, que van a ser ejecutados simultáneamente de tal forma que podamos evaluar si alguna de las sentencias ha fallado y de ser así poder deshacer los cambios en el momento sin alterar de forma alguna la base de datos.