MySQL - Transacciones
Una transacción es un grupo secuencial de operaciones de manipulación de bases de datos, que se realiza como si fuera una sola unidad de trabajo. En otras palabras, una transacción nunca estará completa a menos que cada operación individual dentro del grupo sea exitosa. Si alguna operación dentro de la transacción falla, toda la transacción fallará.
Prácticamente, agrupará muchas consultas SQL en un grupo y las ejecutará todas juntas como parte de una transacción.
Propiedades de las transacciones
Las transacciones tienen las siguientes cuatro propiedades estándar, a las que generalmente se hace referencia con el acrónimo ACID -
Atomicity- Esto asegura que todas las operaciones dentro de la unidad de trabajo se completen con éxito; de lo contrario, la transacción se aborta en el punto de falla y las operaciones anteriores se revierten a su estado anterior.
Consistency - Esto asegura que la base de datos cambia correctamente de estado tras una transacción confirmada con éxito.
Isolation - Esto permite que las transacciones operen de forma independiente y transparente entre sí.
Durability - Esto asegura que el resultado o efecto de una transacción comprometida persista en caso de falla del sistema.
En MySQL, las transacciones comienzan con la declaración BEGIN WORK y terminar con un COMMIT o un ROLLBACKdeclaración. Los comandos SQL entre las declaraciones inicial y final forman la mayor parte de la transacción.
COMMIT y ROLLBACK
Estas dos palabras clave Commit y Rollback se utilizan principalmente para transacciones MySQL.
Cuando se completa una transacción exitosa, se debe emitir el comando COMMIT para que los cambios en todas las tablas involucradas surtan efecto.
Si ocurre una falla, se debe emitir un comando ROLLBACK para devolver cada tabla referenciada en la transacción a su estado anterior.
Puede controlar el comportamiento de una transacción configurando la variable de sesión llamada AUTOCOMMIT. Si AUTOCOMMIT se establece en 1 (el valor predeterminado), entonces cada instrucción SQL (dentro de una transacción o no) se considera una transacción completa y se confirma de manera predeterminada cuando finaliza.
Cuando AUTOCOMMIT se establece en 0, emitiendo el SET AUTOCOMMIT = 0 comando, la serie subsiguiente de declaraciones actúa como una transacción y no se compromete ninguna actividad hasta que se emita una declaración COMMIT explícita.
Puede ejecutar estos comandos SQL en PHP utilizando el mysql_query() función.
Un ejemplo genérico de transacción
Esta secuencia de eventos es independiente del lenguaje de programación utilizado. La ruta lógica se puede crear en cualquier idioma que use para crear su aplicación.
Puede ejecutar estos comandos SQL en PHP utilizando el mysql_query() función.
Comience la transacción emitiendo el comando SQL BEGIN WORK.
Emita uno o más comandos SQL como SELECT, INSERT, UPDATE o DELETE.
Compruebe que no haya ningún error y que todo esté de acuerdo con su requerimiento.
Si hay algún error, emita un comando ROLLBACK; de lo contrario, emita un comando COMMIT.
Tipos de tablas seguras para transacciones en MySQL
No puede utilizar transacciones directamente, pero puede hacerlo para determinadas excepciones. Sin embargo, no son seguros ni están garantizados. Si planea usar transacciones en su programación MySQL, entonces necesita crear sus tablas de una manera especial. Hay muchos tipos de tablas que admiten transacciones, pero la más popular esInnoDB.
El soporte para tablas InnoDB requiere un parámetro de compilación específico al compilar MySQL desde la fuente. Si su versión de MySQL no es compatible con InnoDB, solicite a su proveedor de servicios de Internet que cree una versión de MySQL compatible con los tipos de tabla InnoDB o descargue e instale elMySQL-Max Binary Distribution para Windows o Linux / UNIX y trabajar con el tipo de tabla en un entorno de desarrollo.
Si su instalación de MySQL admite tablas InnoDB, simplemente agregue un TYPE = InnoDB definición a la declaración de creación de la tabla.
Por ejemplo, el siguiente código crea una tabla InnoDB llamada tcount_tbl -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)
Para obtener más detalles sobre InnoDB, puede hacer clic en el siguiente enlace: InnoDB
Puede utilizar otros tipos de tablas como GEMINI o BDB, pero depende de su instalación, si es compatible con estos dos tipos de tablas o no.