Codeigniter - transacciones

 
Vista:
Imágen de perfil de Alejandro
Val: 6
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

transacciones

Publicado por Alejandro (5 intervenciones) el 18/05/2018 17:14:47

Transacciones en codeigniter



hola que tal, estoy desarrollando un sistema en el cual puede existir la concurrencia (hablo de un numero bajo, 2 o 3 usuarios haciendo el mismo proceso, pero que al final no me deja tranquilo que pueda surgir un problema).
el problema es que un campo secuencial no lo tengo como autoincrement, lo que hago es calcular el valor del siguiente registro consultando el ultimo registro y sumandole 1 y asi despues hago el insert. bueno, la duda es, ¿si uso transacciones en codeigniter, y dos usuarios hacen el insert al mismo tiempo, las transacciones se efectuan hasta que termino una u otra, es decir, no puede existir el caso en el que se consulte el mismo ultimo registro de la tabla y arroje error de duplicidad?

Espero haberme dado a entender, sin mas, gracias de antemano. Saludos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Transacciones en CodeIgniter

Publicado por Alejandro (44 intervenciones) el 01/09/2023 22:57:53
En CodeIgniter, puedes utilizar transacciones para manejar situaciones de concurrencia y asegurarte de que las operaciones en la base de datos se ejecuten de manera segura. Cuando utilizas transacciones, las consultas se bloquean hasta que la transacción se complete, lo que evita problemas de concurrencia como el que mencionaste.

Para tu caso específico, donde deseas asegurarte de que no ocurra una duplicación de valores secuenciales al realizar inserciones concurrentes, aquí hay una guía de cómo hacerlo:

1. Inicia la transacción:

1
$this->db->trans_start();

2. Realiza la consulta para obtener el último valor secuencial:

1
2
3
$query = $this->db->query("SELECT MAX(valor_secuencial) as max_valor FROM tu_tabla");
$row = $query->row();
$ultimo_valor = $row->max_valor;

3. Calcula el siguiente valor secuencial:

1
$siguiente_valor = $ultimo_valor + 1;

4. Realiza la inserción con el nuevo valor secuencial:

1
2
3
4
5
6
$data = array(
   'valor_secuencial' => $siguiente_valor,
   // Otros campos de tu inserción
);
 
$this->db->insert('tu_tabla', $data);

5. Finaliza la transacción:

1
$this->db->trans_complete();

Si en algún momento durante la transacción ocurre un error en alguna de las consultas SQL, la transacción se revertirá automáticamente y no se realizarán cambios en la base de datos. Esto garantiza la integridad de los datos y evita la duplicación de valores secuenciales.

Espero que esta información te sea útil para manejar la concurrencia en tu sistema desarrollado con CodeIgniter. ¡Saludos, tocayo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar