Category Archives: MYSQL

Transacciones en Mysql

Para manejar Transacciones se debe utilizar tablas del tipo InnoDB además permite definir reglas de integridad referencial.

Para asegurarnos que tenemos soporte para el tipo de tablas InnoDB podemos ejecutar la siguiente sentencia:
mysql> SHOW VARIABLES LIKE ‘%innodb%';
+———————————+————+
| Variable_name | Value |
+———————————+————+
| have_innodb | YES |
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_size | 8388608 |
| innodb_data_file_path | ibdata:30M |
| innodb_data_home_dir | |
| innodb_file_io_threads | 4 |
| innodb_force_recovery | 0 |
| innodb_thread_concurrency | 8 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_fast_shutdown | ON |
| innodb_flush_method | |
| innodb_lock_wait_timeout | 50 |
| innodb_log_arch_dir | . |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | . |
| innodb_mirrored_log_groups | 1 |
| innodb_max_dirty_pages_pct | 90 |
+———————————+————+
20 rows in set (0.00 sec)
La variable más importante es por supuesto have_innodb que tiene el valor YES.

Ahora veamos como usar transacciones.
BEGIN;
INSERT INTO innotest VALUES(4);
SELECT * FROM innotest;
+——-+
| campo |
+——-+
| 1 |
| 2 |
| 3 |
| 4 |
+——-+
4 rows in set (0.00 sec)
/* Si en este momento ejecutamos un ROLLBACK, la transacción no será completada, y los cambios realizados sobre la tabla no tendrán efecto*/
mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)