En este momento estás viendo Transacciones en MySQL

Transacciones en MySQL

Tiempo de lectura estimado: 2 minutos

Seguro que muchos habéis oido hablar de las transacciones SQL. Sus usos, sus pros y contras y un largo etc que está muy bien documentado. Y como hoy en día hay información a patadas, vamos a pasar al plato fuerte. Un caso real y como siempre sencillito para no marearnos en exceso.

Supongamos que tenemos nuestra tabla de categorías y nuestra tabla de productos en nuestra base de datos. Tenemos nuestro backend donde nos muestra el listado de productos y las categorías a las que pertenecen.

Pero qué pasa cuando quiero cambiar la categoría de +100 productos?. ¿Voy producto por producto?.  Y si cambio el nombre de la categoría ha de verse reflejado en los productos a los que pertenece.

Aquí entra en juego las transacciones. Necesitaba actualizar las 2 tablas al mismo tiempo y que no hubiese ningún problema durante el transcurso de la operación. Y en caso de que lo hubiese, no se aplicara ningún cambio.

Vistazo general del listado de productos con las categorías a las que pertenece cada uno de ellos.

 

 

Y ahora que tenemos la idea, vamos a ponerla en práctica.

[code language=»php»]
try {
$query=$this->dbh;

$query->beginTransaction();

//Actualizamos la primera tabla
$sql = «UPDATE tipoproducto SET tipoProducto = ‘».$tipoProducto.»‘ , imgCategoria = ‘».$imgCategoria.»‘ WHERE idTipo = ‘».$idTipo.»‘»;

$stmt = $query->prepare($sql);
$stmt->execute(array(
‘:idTipo’ => $idTipo,
‘:tipoProducto’ => $tipoProducto,
‘:imgCategoria’ => $imgCategoria
)
);

//Actualizamos la segunda
$sql = «UPDATE productos SET tipoProducto = ‘$tipoProducto’ WHERE idTipo = ‘$idTipo'»;
$stmt = $query->prepare($sql);
$stmt->execute(array(
‘:idTipo’ => $idTipo,
‘:tipoProducto’ => $tipoProducto
)
);
//Si todo ha ido bien, hacemos un commit.
$query->commit();
} catch (Exception $e) {
$query->rollBack();
// $e->getMessage();
// exit($e);
//Si ha habido error, se deshacen cambios.

}
[/code]

Saludos!.

Serna Studio

Desarrollador de software • Amante del diseño gráfico, diseño 3D y la locura • 🧠 + 🙌 + ☕️ son los ingredientes que debemos unir • ¡No pongas fronteras en tus proyectos!.

Deja una respuesta