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

[SOLUCIONADO] Bloqueo de auto_increment en una tabla

Estas en el tema de Bloqueo de auto_increment en una tabla en el foro de Mysql en Foros del Web. Buen día estimados. Necesito de su experiencia. Dentro de una base de datos, tengo una tabla con un campo auto_increment este es primary key de ...
  #1 (permalink)  
Antiguo 18/07/2014, 22:57
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta Bloqueo de auto_increment en una tabla

Buen día estimados.

Necesito de su experiencia.

Dentro de una base de datos, tengo una tabla con un campo auto_increment este es primary key de dicha tabla (esta tabla tiene un motor de almacenamiento MyISAM)

Cuando voy a ingresar un nuevo registro, hago que me muestre el id a tomar del campo auto_increment con esta consulta: Select auto_increment from `information_schema`.tables where TABLE_NAME = 'mitabla';

El Problema es:
Hay varios usuarios que ingresan registros al mismo tiempo, y tengo inconsistencia de datos, porque cogen el mismo id del auto_increment.

Como evito eso?, debo bloquear la tabla hasta que el primero que cogio el auto_increment termine? , hay otra manera de hacerlo.

Les agradecería mucho mostrármelo en un ejemplo, perdon por mi inexperiencia pero estoy avanzando en eso.

Desde ya gracias por su ayuda.
  #2 (permalink)  
Antiguo 19/07/2014, 06:11
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: Bloqueo de auto_increment en una tabla

No soy un gran entendido pero mi modesta opinión es :

No creo que se trate de bloquear la bd cambiando a InnoDB (que todo es plantearse si haces mucho DML) , yo creo que es un problema de diseño.

Creo que haces un select de un numero pk que se genera en base al ultimo pk existente , pero no inserta hasta que el user no dispare la acción , mediante un botón o lo que sea y el tiempo que esta ese user pensando si darle o no ya han entrado otros users que se han adelantado.


Con lo que a mi se me ocurre que cuando vas a ingresar un nuevo registro .. le visualices un random generado desde php , así en la siguiente acción / botón o lo que sea ya haces el insert con ese random y el pk que le toque que se haya generado.

Saludos!
  #3 (permalink)  
Antiguo 19/07/2014, 07:44
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Bloqueo de auto_increment en una tabla

Cita:
Iniciado por Djoaq Ver Mensaje
No soy un gran entendido pero mi modesta opinión es :

No creo que se trate de bloquear la bd cambiando a InnoDB (que todo es plantearse si haces mucho DML) , yo creo que es un problema de diseño.

Creo que haces un select de un numero pk que se genera en base al ultimo pk existente , pero no inserta hasta que el user no dispare la acción , mediante un botón o lo que sea y el tiempo que esta ese user pensando si darle o no ya han entrado otros users que se han adelantado.


Con lo que a mi se me ocurre que cuando vas a ingresar un nuevo registro .. le visualices un random generado desde php , así en la siguiente acción / botón o lo que sea ya haces el insert con ese random y el pk que le toque que se haya generado.

Saludos!

Efectivamente, yo opino igual.
lo mas logico es que recuperes el id una vez a sido insertado el registro lo puedes hacer con mysqli_insert_id
  #4 (permalink)  
Antiguo 19/07/2014, 09:05
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Bloqueo de auto_increment en una tabla

Gracias por responder estimados.

Les agradecería un ejemplo de como usar un random generado desde php.
En este caso tendría que quitar el auto_increment de mi tabla?
usando random generado desde php los registros se agregaran consecutivamente?

Saludos.
  #5 (permalink)  
Antiguo 19/07/2014, 09:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Bloqueo de auto_increment en una tabla

No es necesario tal nivel de complicaciones. MySQL tiene recursos mara gestionar la concurrencia en los casos de AI en tablas MyISAM.
El manual de referencia tiene capítulos dedicados al tema.
Más tarde te lo comento.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 19/07/2014, 09:54
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 9 meses
Puntos: 0
De acuerdo Respuesta: Bloqueo de auto_increment en una tabla

Ya lo tengo señores.
Los sistemas multiusuarios no muestra el id a tomar, para esto tendría ejecutar mi consulta enviando ese campo con un NULL para que me coja el siguiente auto_incremente, sin ningún inconveniente.

Sin embargo lo usuarios quieren que les muestre el id a tomar, entonces les mostrare temporalmente el auto_increment y si alguien guardo primero les saldrá un mensaje de error.

Muy agradecido señores, un abrazo afectuoso desde Trujillo-Perú
  #7 (permalink)  
Antiguo 19/07/2014, 09:59
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: Bloqueo de auto_increment en una tabla

Cita:
Iniciado por manuel001 Ver Mensaje
Gracias por responder estimados.

Les agradecería un ejemplo de como usar un random generado desde php.
En este caso tendría que quitar el auto_increment de mi tabla?
usando random generado desde php los registros se agregaran consecutivamente?

Saludos.
Random mysql con fecha y hora :
Código MySQL:
Ver original
  1. Select CONCAT(FLOOR(RAND() * 9999) ," ",NOW()) AS `numero aleatorio`  from 'mitabla';

Por otro lado cuando hagas el insert , añade este campo a la tabla que tenga un id campo autoincremental not null pk, de esta forma tendrás una relación id único:numero_aleatorio .

De todas formas aquí gnzsoloyo que es un fiera nos resolverá de la forma mas eficiente y correcta cualquier duda!

Un saludo!
  #8 (permalink)  
Antiguo 19/07/2014, 11:01
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Bloqueo de auto_increment en una tabla

Gracias Djoaq, lo estoy provando.

Etiquetas: bloqueo, campo, key, registro, select, tabla, usuarios
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 12:54.