es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ROLLBACK no está deshaciendo la transacción [NodeJS, MySQL]

connection.query(`START TRANSACTION;`, async function (err) {
  if (err) {
    req.flash("flash", "Algo salió mal al borrar. Inténtalo de nuevo.");
    return res.redirect("back");
  } else {
    await connection.query(
      `INSERT INTO... ; SELECT LAST_INSERT_ID();`,
      async (error, results1) => {
        if (error) {
          await connection.query(`ROLLBACK;`, function (err) {
            req.flash("flash", "Hubo un error al publicar.");
            return res.redirect("/post");
          });
        } else {
          var post_id = await results1[0].insertId;
          await connection.query(
            `INSERT INTO...`,
            [],
            async (error, results) => {
              if (error) {
                await connection.query(`ROLLBACK;`, function (err) {
                  req.flash("flash", "Hubo un error al publicar.");
                  return res.redirect("/post");
                });
              } else {
                await connection.query(
                  `INSERT INTO...`,
                  async (error, results) => {
                    if (error) {
                      await connection.query(`ROLLBACK;`, function (err) {
                        req.flash("flash", "Hubo un error al publicar.");
                        return res.redirect("/post");
                      });
                    }
                    await connection.query(`ROLLBACK;`, function(err){
                    req.flash("flash", "Se hizo...");
                    return res.redirect("back");
                 })
         ...
});

Primero inicio la transacción. Luego tengo el código en el medio para insertar datos en 3 tablas. Quería probar el rollback que supuestamente deshace todo después de START TRANSACTION pero no hizo nada. ¿Qué hice mal?

(El código funciona por sí mismo, así que por favor ignora si me equivoqué en la colocación de paréntesis).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    P: ¿Qué hizo mal el experto en TI en su código para probar un rollback?

    El experto en TI no realizó ninguna acción que desencadenara un rollback. El código tal como está escrito solo contiene instrucciones ROLLBACK dentro de los manejadores de errores, que solo se ejecutan si hay un error durante la ejecución de las consultas correspondientes. Dado que todas las consultas en este bloque de código están escritas para ejecutarse intencionalmente sin errores, las instrucciones ROLLBACK nunca se activan. Para probar un rollback, el experto en TI necesita crear intencionalmente un error en una de las consultas, como intentar insertar datos que violen una restricción única.

Comments are closed.