- I-InnoDB ithola ama-transacciones i-ACID, i-bloqueo noma i-fila y OKUPHINDA OKUFUNDILE noma kubi.
- Lawula ukuzibophezela okuzenzakalelayo, QALA UKWENZAKALELANA, UKUZENZA/I-ROLLBACK kanye ne-SAVEPOINT ye-atomicidad yangempela.
- I-Ajusta niveles de aislamento y modos FUNDA KUPHELA/FUNDA BHALA ngokuhambisana ne-SET TRANSACTION.
- I-Evita sucias, akukho okuphindaphindwayo y fantasmas equilibrando consistencia y rendimiento.

Ama-transacciones ku-MySQL kanye nesisekelo sokusebenza kanye nedatha yefomethi cuando intervienen varias sentencias que deben comportarse como una sola unidad. Njengoba i-algo falla por el camino, queremos volver al estado anterior sin dejar la base de datos a medias. En este artículo vas a encontrar una explicación completa y práctica de cómo funcionan, qué propiedades cumplen y cómo configurarlas para equilibrar consistencia y rendimiento.
I-Además de cubrir comandos básicos como QALA UKWENZIWA, ZINIKE kanye ne-ROLLBACK, veremos el papel de ukuzibophezela, the niveles de aislamento ACID, izingidi, izindawo zokulondoloza, izindlela ze-acceso y SET TRANSATION. I-También incluimos ejemplos paso a paso de problemas de concurrencia típicos, notas sobre I-InnoDB vs MyISAM, cómo manejar transacciones desde PHP (mysqli) futhi ku izinqubo ezigciniwe, así como una batería de casos prácticos para que puedas afianzar lo aprendido. Si estás preparando DAW, DAM noma ASIR, estos apuntes te venir como anillo al dedo.
Apuntes de BD ku-DAW, DAM kanye ASIR - Curso 2025/2026. I-Este material sintetiza las mejores prácticas y la teoría clave futhi idinga ukubusa ukuze uthole ukwaziswa okwengeziwe mayelana nokuthengiselana ku-MySQL ukuze kube yimpumelelo.
Note: El dinero donado nos sirve para mantener nuestro sitio web, así como paragener mejor contenido. Tu apoyo nos ayuda a seguir creando guías técnicas útiles y al día.
Qué es una transacción y por qué importa
Una transacción es una unidad lógica de trabajo que agrupa varias sentencias de forma que o se aplican todas o no se aplica ninguna. I-Esto evita estados inconsistentes, especialmente en operaciones compuestas que tocan varias tablas o filas. I-Piensa en un traspaso entre cuentas bancarias: se descuenta de la cuenta origen y se abona en la destino; si una de las acciones falla, no puedes permitir que la otra quede confirmada sola.
I-MySQL, i-con el motor InnoDB, sebenzisa i-transacciones según el model I-ACID, proporcionando garantías sólidas de integridad incluso ante fallos de sistema o cortes de luz. Si vienes de otros SGBD, te sentirás como en casa: los conceptos clave son los mismos.
I-Propiedades ACID: las cuatro garantías
- I-Atomicity: el bloque se trata como indivisible; o ukwenza OK o nada. Sina operación falla, se revierte todo el conjunto.
- Isimo: cada transacción lleva la base de datos de un estado válido a otro. No deja reglas de negocio vulneradas ni datos imposibles.
- Ukuzihlukanisa: lo que ocurre dentro de una transacción akukho debe interferir ni verse afectado por otras que se ejecutan en paralelo, según el nivel elegido.
- Ukuqina: unavez haces
COMMIT, los cambios quedan persistidos kufaka phakathi i-ante fallos.
I-InnoDB vs MyISAM: el motor sí importa
Ku-MySQL kukhona okuhlukahlukene izinjini zokugcina. I-Solo InnoDB i-soporta transacciones kanye ne-clave foráneas; i-además ofrece bloqueo i-nivel de fila y recuperación ante fallos. I-MyISAM ayikho i-soporta transacciones y prioriza velocidad sobre consistencia, lo que es útil para ciertos escenarios de lectura intensiva, pero Ayikho i-adecuado cuando edinga i-ACID.
Ukuzibophezela okuzenzakalelayo: qué es y como te afecta
I-MySQL inenani elifanele autocommit activado noma defect. I-Esto significa que, fuera de una transacción explícita, thumela i-DML ukuze uqinisekise i-automaticamente como si estuviese envuelta por START TRANSACTION y COMMIT. Si la Sentencia falla, se revierte automaticamente ese intento, pero si tiene éxito, no podrás deshacerla manualmente con ROLLBACK.
Cuando inicias una transacción con START TRANSACTION, I-MySQL ingasebenzi okwesikhashana futhi izenze ngokuzenzakalelayo ngokushesha COMMIT o ROLLBACK. U-Puedes cambiar el autocommit anivel de sesión con SET:
-- Ver el valor actual
SELECT @@autocommit;
-- Desactivar autocommit en la sesión actual
SET autocommit = 0;
-- Activarlo de nuevo
SET autocommit = 1;
Ngemuva kwalokho deactivar autocommit, los cambios no son permanentes hasta que ejecutes COMMIT; ngibuza i-descartarlos, usa ROLLBACK. I-Ten cuenta que esta configuración es por sesión y se resetea al cerrar la conexión.
Ama-Comandos básicos: QALA UKWENZIWA, ZINIKELE kanye ne-ROLLBACK
Izibonelo ezilandelayo: iniciar transacción, ejecutar operaciones DML y confirmar or deshacer según el resultado. Tienes sinónimos como BEGIN o BEGIN WORK para iniciar, y COMMIT/ROLLBACK para finalizar:
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 20;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 30;
COMMIT; -- o ROLLBACK si algo fue mal
Si el sistema cae entre las dos UPDATE o se pierde la conexión con autocommit deactivado, I-InnoDB iqinisekisa ukuthi i-transacción ayiphelele ngaphandle kokuqinisekisa. Si una de las cuentas no existe o una restricción (iph. ej., CHECK de saldo no negativo) falla, la transacción se revierte y la base queda como al principio.
Ama-Savepoints: lawula i-fino dentro de la transacción
cunt SAVEPOINT creas puntos de recuperación dentro de una transacción para poder deshacer parcialmente sin tirar todo el trabajo:
START TRANSACTION;
UPDATE productos SET stock = stock - 2 WHERE id = 10;
SAVEPOINT p1;
UPDATE productos SET stock = stock - 5 WHERE id = 11;
-- Si falla lo siguiente, solo deshacemos hasta p1
ROLLBACK TO SAVEPOINT p1;
-- Seguimos con otras operaciones
RELEASE SAVEPOINT p1;
COMMIT;
I-Si ichaza izinhlobonhlobo ze-SAVEPOINT con el mismo nombre, i-MySQL icubungula i-ultimo. I-También puedes eliminarlos con RELEASE SAVEPOINT para mantener limpia la transacción.
I-Niveles de aislamiento: i-equilibrio entre consistencia y rendimiento
Isici esibalulekile ku-MySQL REPEATABLE READ, que ofrece lecturas coherentes dentro de la misma transacción gracias al multiversioning (MVCC).
Izinkinga ze-clasicos de concurrencia queremos acotar:
- I-Lectura sucia (I-Dirty Read): leer cambios de otra transacción que aún no ha hecho
COMMIT. - I-Lectura ayikho ephindaphindayo: leer la misma fila dos veces y obtener valores distintos por realizaciones confirmadas de otra transacción entre ambas lecturas.
- I-Lectura fantasma: ejecutar la misma consulta y que aparezcan filas nuevas debido a inserciones confirmadas por otra transacción.
I-Comportamiento por nivel (resumen práctico): READ UNCOMMITTED permite las tres anomalias; READ COMMITTED evita lecturas sucias i-pero puede sufrir akukho okuphindaphindwayo kanye nemicabango; REPEATABLE READ evita sucias y akukho eziphindaphindwayo y, ngokuvamile, solo admite potenciales “fantasmas”; SERIALIZABLE bloquea como si ejecutaras en series, eliminando las tres a costa de más bloqueos.
-- Consultar nivel de aislamiento (sesión y global)
SELECT @@transaction_isolation; -- sesión
SELECT @@global.transaction_isolation; -- global
I-Puedes ajustar el aislamento por transacción, sesión noma globalmente. Recuerda que los cambios GLOBAL afectan a nuevas conexiones, no a las existentes.
I-Bloqueos y lecturas con bloqueo
Para mantener el aislamento, el motor usa ama-bloqueos (ukukhiya). I-InnoDB bloque noma iphutha a nivel de fila, lo que permite imeya concurrencia que el bloqueo por tabla. Un bloqueo impide que otras transacciones vean or alteren datos en uso mientras la tuya no haya finalizado.
Según el nivel y la operación, I-MySQL idinga ama-bloqueos wokufunda noma umbhalo. Isibonelo SERIALIZABLE con autocommit deactivado convierte lecturas en bloqueantes para reforzar la consistencia. I-El objetivo es evitar que otra transacción interfiera con tu “instantánea” de datos.
Izindlela zokufinyelela: FUNDA BHALA y FUNDA KUPHELA
Las transacciones pueden declararse en modo READ WRITE (okuzenzakalelayo) noma READ ONLY. I-En modo solo lectura, akukho ma-cambios avunyelwe sobre tablas, útil para informes reproducibles y estables.
-- Establecer modo de acceso al iniciar
START TRANSACTION READ ONLY;
-- o
START TRANSACTION READ WRITE;
I-También puedes fijarlo con SET TRANSACTION, combinándolo con el nivel de aislamento y el ambit kwesicelo.
SETHA I-TRANSECTION: aislamento, acceso y ámbitos (ISESSION, GLOBAL)
Isigwebo SET TRANSACTION permite establecer el nivel de aislamento y el modo de acceso para la i-proxima transacción, Kuwo wonke iseshini noma indlela global:
-- Aplica a la próxima transacción (si no indicas ámbito)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY;
-- Aplica a todas las transacciones de esta sesión actual
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE;
-- Aplica a sesiones futuras (no a las existentes)
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Este control fino te permite i-equilibrar fiabilidad y rendimiento según el caso de uso, desde cargas analíticas a alta concurrencia OLTP.
Ejemplos de concurrencia: Dirty Read, No Repetable y Fantasma
I-Dirty Read (i-lectura sucia): una transacción B lee valores no confirmados por A. Con READ UNCOMMITTED esto es posible; con READ COMMITTED en adelante, no.
-- Terminal A
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
-- (sin COMMIT todavía)
-- Terminal B
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT saldo FROM cuentas WHERE id = 1; -- puede ver el saldo "sucio"
-- Terminal A
ROLLBACK; -- los cambios se deshacen
I-Lectura ayikho ephindaphindayo: Iqinisekisa UKUBUYEKEZWA entre dos lecturas de A. Con REPEATABLE READ lo evitas; con READ COMMITTED i-puede ocurrir.
-- Terminal A
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SELECT saldo FROM cuentas WHERE id = 1; -- lectura 1
-- Terminal B (otra sesión)
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
COMMIT;
-- Terminal A
SELECT saldo FROM cuentas WHERE id = 1; -- lectura 2 (puede diferir)
ROLLBACK;
I-Lectura fantasma: entre dos consultas que agregan datos, otra transacción inserta filas que encajan en el filtro. Con SERIALIZABLE se evita a costa de más bloqueos.
-- Terminal A
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SELECT SUM(saldo) FROM cuentas;
-- Terminal B
INSERT INTO cuentas(id, saldo) VALUES (4, 3000);
COMMIT;
-- Terminal A
SELECT SUM(saldo) FROM cuentas; -- puede observar un "fantasma"
ROLLBACK;
I-DML esencial y claves foráneas: efectos IYASUSA / IYABUYEKEZA
El DML agrupa KHETHA, FAKA, BUYEKEZA y SUSA. I-Definir claves foráneas ku-InnoDB, ifaka imininingwane mayelana ne-borrados/actualizaciones ku-tabla referenciada:
RESTRICT: impide eliminar/actualizar si hay referencias. Inamandla okushintsha i-MySQL.CASCADE: propaga la acción a las filas hijas.SET NULL: pone el valor aNULLen las filas hijas.NO ACTION: ulingana aRESTRICTku-MySQL.SET DEFAULT: ayikho i-disponible evela ku-InnoDB ne-MySQL.
Estas reglas indodana clave para ireferensi ye-asegurar consistencia y evitar datos huérfanos cuando trabajas con transacciones y relaciones complejas.
I-Transacciones desde PHP (mysqli): zibophezele ngokuzenzakalelayo, zibophezele futhi zibuyisele emuva
Isebenza ngezinhlelo ze-PHP mysqli, i-puedes controlar transacciones de forma sencilla. Desaactiva autocommit, sicela uthintane nokuqinisekisa noma ukuphinda wenze lokhu okulandelayo:
$db = new mysqli("localhost", "root", "pass", "database");
$db->autocommit(false);
try {
$db->query("INSERT INTO users (name) VALUES ('marcus')");
$db->query("UPDATE users SET name = 'jane' WHERE id = 39");
$db->commit();
} catch (Throwable $e) {
$db->rollback();
// log del error
}
Ngaleli phethini, si cualquier sentencia falla, haces rollback() y evitas inconsistencias. I-Luego yanquma ukuthi i-reintentas, i-notificas o tomas otra acción.
Izinqubo namaphutha ku-MySQL
Izinqubo ezilandelwayo ze-MySQL zizomenyezelwa manejadores de errores ukuze SQLEXCEPTION y SQLWARNING, ukuze ejecutes ROLLBACK ngokuzenzakalelayo i-ante fallos:
DELIMITER //
CREATE PROCEDURE transferir(IN p_origen INT, IN p_destino INT, IN p_importe DECIMAL(10,2))
BEGIN
DECLARE exit handler FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - p_importe WHERE id = p_origen;
UPDATE cuentas SET saldo = saldo + p_importe WHERE id = p_destino;
COMMIT;
END //
DELIMITER ;
I-También puedes usar un único manejador común paradiferentes tipos de error njenge-encaja mejor. I-El objetivo es centralizar la reversión y dejar la base limpia cuando algo no va bien.
I-Casos prácticos propuestos: pon a prueba lo aprendido
Tienda de informática
- Faka izinto zokwakha indicando codigo y nombre; y también solo con nombre.
- Faka imikhiqizo i-asociados a fabricantes con diferentes conjuntos de columnas (con y sin código).
- Crea la tabla
fabricante_productosikholomunombre_fabricante,nombre_producto,precioe inserta de una sola vez todos los registros funatienda. - Crea la vista
vista_fabricante_productoscon las tres columnas anteriores. - Qeda izinto zokwakha njengoba
AsusoXiaomiy razona por qué puede no ser posible; ajusta claves foráneas (iph. ej.,ON DELETE) ngiyabonga. - I-Actualiza codigos de fabricantes (
Lenovoengu-20,Huaweia 30) kanye ne-analiza las restricciones referenciales necesarias. - Actualiza precios sumando 5 € a todos los productos; ukususa impresoras con precio <200 €.
Abasebenzi
- Inserta departamentos con diferentes combinaciones de columnas (con y sin código, con gastos).
- Faka ama-empleados i-vinculados a departamentos (con y sin código explícito).
- Crea y rellena
departamento_backupkusukadepartamento. - Elimina departamentos (
Proyectos,Desarrollo) y justifica si se puede o no; ajusta foráneas de ser necesario. - I-Actualiza codigos (isb.,
Recursos Humanoskuye 30;Publicidada 40) evaluando impacto referencial. - I-Incrementa presupuestos +50.000 € solo para los <20.000 €.
- Okwenziwayo: elimina empleados sin departamento asociado garantizando consistencia.
Ingadi
- Faka i-oficina en
Almeríay un empleado representante de ventas. - Faka iklayenti i-cuyo comercial sea el empleado yangaphambili; dala i-pedido con al menos dos productos.
- I-Actualiza el codigo del cliente y uqinisekise ama-cambios en tablas relacionadas; isuse y revisa efectos; hhayi i-hay cascadas, lungiselela
ON DELETE CASCADE. - Qeda amaklayenti isono pedidos; u-20% el precio de productos sin pedidos; i-borra pagos del cliente con menor limite de crédito.
- I-Ajusta limite de crédito a 0 para el cliente con menos unidades del producto
11679. - Modifica la tabla
detalle_pedidoañadiendo campoiva; mediante una transacción pon 18 i-pedidos desde enero 2009 y 21 kwabanye. - Faka inkambu
total_lineay calcula conprecio_unidad*cantidad*(1 + (iva/100))para todos los registros. - Borra el cliente con menor límite de crédito: evalúa si se puede con una sola consulta y por qué.
- Faka i-oficina en
Granadacon tres comerciales y tres amaklayenti i-asociados; ukuthengiselana para un pedido por cliente con dos productos cada uno; borra un client y ajusta foráneas si no hay cascada; ukuthengiselana para registrar pagos de esos pedidos.
Isinyathelo esilandelayo: simula una pérdida de conexión con SET AUTOCOMMIT = 0, cierra la sesión antes de finalizar y luego reconecta para comprobar qué quedó persistido y qué no. I-Esto te aterriza el concepto de durabilidad y atomicidad.
Iqhathanisa ne-SQL Server ne-Oracle
I-Los conceptos son homólogos: QALA/QALA UKUNIKEZELWA, IKOMIT, I-ROLLBACK y amazinga okuzihlukanisa. Iseva ye-SQL ikhona futhi inezinhlobo eziningi ISITHOMBE, ukuthi presenta una vista consistente al inicio de la transacción sin bloquear tanto como SERIALIZABLE. I-Oracle ofrece un conjunto de niveles; en la práctica, cambia el “dialecto” pero la música es la misma: se busca el punto óptimo entre aislamento y rendimiento.
Preguntas típicas de examen/entrevista
- Ingabe i-ACID idinga usizo? I-Defínelas y pon un ejemplo.
- ¿Cuáles son los tres problemas de concurrencia y cómo mitigarlos con niveles de aislamento?
- Ingabe unenkinga nge-InnoDB? OKUPHINDA OKUFUNDILE.
- ¿Uyawabona ama-pueden hacer transacciones ne-MyISAM? Cha, idinga i-InnoDB.
- I-Diferencias InnoDB vs MyISAM: transacciones, foráneas, bloqueo por fila, recuperación, njll.
- Ukudluliselwa kwebhange: ¿qué pasa si falla una
UPDATEintermedia o si la cuenta no existe? I-Respuesta: i-rollback asegura consistencia.
I-Dominar transacciones ku-MySQL ifakiwe futhi ihlanganiswe ACID, autocommit, aislamento, bloqueos, savepoints y modos de acceso para proteger tus datos sin estrangular el rendimiento. Con InnoDB, tienes las herramientas para que operaciones complejas (pagos, pedidos, inventario) se comporten como una sola acción segura. I-Ajusta SET TRANSATION al caso de uso, apóyate en procedimientos y control de errores, y practica con los casos propuestos: el salto de calidad en tus sistemas se nota enseguida.
