Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Concurrencia al momento de insertar un registro

Estas en el tema de Concurrencia al momento de insertar un registro en el foro de Mysql en Foros del Web. Esto es una duda que tengo y me gustaria saber si esta bien lo que estoy haciendo haber les dejo el problema. El usuario 1 ...
  #1 (permalink)  
Antiguo 02/06/2010, 15:04
 
Fecha de Ingreso: enero-2010
Mensajes: 19
Antigüedad: 14 años, 3 meses
Puntos: 2
Concurrencia al momento de insertar un registro

Esto es una duda que tengo y me gustaria saber si esta bien lo que estoy haciendo haber les dejo el problema.

El usuario 1 se conecta a mi aplicativo web y llena un formulario, ahora el usuario 2 llena el mismo formulario y los dos dan guardar al mismo tiempo, el problema es con el id que yo lo tengo que autogenerar (Capricho mio :) ) para eso hago un select a mi tabla y recupero el ultimo codigo y le sumo mas 1, tengo que bloquear mi tabla para evitar id duplicada.
Ahora asi es como lo hago:
Código PHP:
Ver original
  1. $db->consulta("LOCK TABLES notasalida AS ns READ, notasalida WRITE");
  2. $cn = $db->consulta('SELECT MAX(ns_c_id) as codigo FROM notasalida');
  3. $data = $db->fetch_assoc($cn);
  4. $cod = substr($data['codigo'],2);
  5. $cod = $cod + 1;
  6. $ncod = strlen($cod);
  7. switch($ncod){
  8.     case 1 : $ncod = "NS00000".$cod;break;
  9.     case 2 : $ncod = "NS0000".$cod;break;
  10.     case 3 : $ncod = "NS000".$cod;break;
  11.     case 4 : $ncod = "NS00".$cod;break;
  12.     case 5 : $ncod = "NS0".$cod;break;
  13. }
  14. $query = "INSERT INTO notasalida  VALUES('$ncod','$cboAlmacen','$txtFecha','$cboRecibido','$cboMotivo','$txtReferencia','$txtObservacion','$cboAutorizacion','$txtSolicitante')";
  15. $cn = $db->consulta($query);
  16. $db->consulta('UNLOCK TABLES');


Me gustaría saber si esta bien o no la forma que lo hago, la tabla es MySam.
Si habrá otra forma mejor de hacerla y con un ejemplito estaría mejor :D!
  #2 (permalink)  
Antiguo 02/06/2010, 15:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Concurrencia al momento de insertar un registro

Claro que hay una mejor forma.

Utiliza Auto_increment.
Lo que dices es cierto... mientras el sistema va, selecciona el numero mayor, hace la suma y la envía a la inserción, puedes presentar problemas de concurrencia. Con autoincrement, el id lo toma el que mas rapido llegue.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 02/06/2010, 16:17
 
Fecha de Ingreso: enero-2010
Mensajes: 19
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: Concurrencia al momento de insertar un registro

gracias por responder n.n el autoincrement como dices seria muy fácil, pero para mi, seria mejor ponerle un prefijo al id para saber de que tabla viene, y el autoincrement creo que no tiene esa posibilidad (?)
  #4 (permalink)  
Antiguo 03/06/2010, 16:27
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 9 meses
Puntos: 10
Respuesta: Concurrencia al momento de insertar un registro

Me parece que estas viendo mal la relación

Si tenemos las tablas

PAIS y USUARIO cada una deberia tener id como estos

ID_PAIS y ID_USUARIO

como evidentemente sabes que el usuario pertenece a un pais tendremos en la tabla USUARIO un campo llamado ID_PAIS igual que en la tabla PAIS, pero en la tabla usuario este campo seria una FK simplemente. De esta forma no tienes como no saber de que tabla viene la relación.

Como te dijeron por ahi, usa el AUTO_INCREMENT

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo

Etiquetas: registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.