Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

230
Views
Durante una transacción, ¿puedo usar los valores actualizados (pero aún no confirmados)?

Lo más probable es que esté complicando demasiado esto. Confío bastante en MySQL, pero nunca antes usé transacciones. Sé que el concepto es begin() , do stuff, commit() o rollback() en caso de falla y estoy bastante seguro de que puedo estructurarlo con facilidad.

Lo que quiero averiguar es que durante una transacción quiero actualizar una tabla y luego usar ese valor actualizado en otra consulta durante la misma transacción. Aquí hay un esquema:

 begin() INSERT SELECT FROM INSERT UPDATE BASED ON SELECT commit()

Obviamente, he reducido el código aquí y esto por sí solo no significa nada. Me gustaría saber si este concepto funciona antes de profundizar demasiado en las transacciones y descubrir que no funciona.

Mi transacción real va a ser aproximadamente 5 veces más grande y partes de ella dependen de otras partes de la transacción sin terminar como se indicó anteriormente.

Estoy usando Laravel, por lo que mi código usa DB::beginTransaction() DB::commit() y DB::rollback() si esto hace alguna diferencia en la pregunta.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Entonces, la respuesta simple a esto es sí.

Realicé varias pruebas con el código que había estado desarrollando y este es el estado, al menos en mi caso.

 DB::beingTransaction()

Ahora hacemos lo nuestro. TODAS LAS DECLARACIONES AQUÍ SON RELATIVAS ENTRE SI Y REALIZADAS EN ORDEN.

 DB::commit()

Esto luego ejecuta todas las declaraciones en orden siempre que la ejecución simulada haya sido un éxito.

 DB::rollback()

Esto se llama en TODOS los métodos en los que los cambios podrían fallar potencialmente dentro de un bloque try catch

Así que permítanme proporcionar un ejemplo funcional (simplificado) de Laravel para demostrar los conceptos básicos:

 public function store(Request $request) { DB::beginTransaction(); try { if(!$this->setAuthorisation($request)) throw new Exception('Failed to set authorisation'); DB::commit(); return response()->json(['status' => 'OK'], 200); } catch (Exception $exception) { DB::rollBack(); return response()->json(['status' => 'Failed', 'error'=>$exception->getMessage()], 500); } }

Ahora desde aquí podemos acceder a los cambios realizados en el método setAuthorisation() , digamos en un método getAuthorisation() y luego aplicar los datos de $data = getAuthorisation() a otro conjunto de código, por ejemplo, en setData($data) .

Toda la transacción funciona en el orden de los eventos simulados antes de confirmar, por lo que "aplica" los cambios antes de "realmente aplicar" los cambios. Es realmente difícil explicar más que eso, así que espero que esto responda a mi propia pregunta.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!