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

Como puedo controlar ids en una base de datos innoDB

Estas en el tema de Como puedo controlar ids en una base de datos innoDB en el foro de Mysql en Foros del Web. Hola soy un poco nuevo en esto de las base de datos innodb el detalle es el siguiente tango una tabla donde quiero simular el ...
  #1 (permalink)  
Antiguo 16/03/2011, 13:43
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Pregunta Como puedo controlar ids en una base de datos innoDB

Hola soy un poco nuevo en esto de las base de datos innodb el detalle es el siguiente tango una tabla donde quiero simular el auto incremento ya que este tipo de base de datos no lo permite estoy trabajando con php y mysql para lo cual desde mi codigo php obtengo el ultimo valor registrado, pero he ahi el detalle si en dado caso que yo creo que puede pasar dos usuarios intentan registrarse al mismo tiempo obtienen el mismo valor de id lei en la ayuda de mysql que esto se podia solucionar con un for update pero no logro encontrar la forma de implementarlo si alguien me pudiera ayudar llebo ya varios dias buscando una solucion
  #2 (permalink)  
Antiguo 16/03/2011, 16:08
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: Como puedo controlar ids en una base de datos innoDB

Saludos

No entiendo por que indicas que innodb no permite autoincrement.. Lee el siguiente articulo Click Acá
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 17/03/2011, 10:38
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo controlar ids en una base de datos innoDB

si disculpa en realidad lo que quise decir es que no utilizo un campo auto increment y pues quiero saber como podria controlar la insercion de ids y evitar la concurrencia esoty trabajando con php y mysql
  #4 (permalink)  
Antiguo 17/03/2011, 10:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como puedo controlar ids en una base de datos innoDB

Usando transacciones.
Lo mejor es definir una PK que no necesite numeración secuencial, es decir basada lo mejor posible en el modelo E-R, pero por sobre todo contorlar todo mediante transactions (Control de Concurrencia )
¿Has estado trabajado ese tema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/03/2011, 12:06
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo controlar ids en una base de datos innoDB

la verdad es que no como podria hacerlo lo que quiero es antes de insertar algo en una tabla obtener el ultimo valor insertado del campo clave y sumarle +1 para el siguiente, de echo lo ise pero me genero el problema de que dos personas entren al mismo tiempo obtienen el mismo valor y es lo que quiero solucionar la verdad eas que no se usar transacciones si me pudieras explicar como te lo agradeseria mucho
  #6 (permalink)  
Antiguo 17/03/2011, 12:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como puedo controlar ids en una base de datos innoDB

Te puse un link que tata el tema. Leelo y veamos a partir de allí.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/03/2011, 12:38
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo controlar ids en una base de datos innoDB

si ya lo lei y por lo que pude en tender utilizaria algo mas o menos asi:

$anio_convocatoria = date(Y);
$mysqli=mysql_query("BEGIN;");
$consulta=mysql_query("SELECT consecutivoestudiante FROM control where convocatoria_id=".$anio_convocatoria." FOR UPDATE");
if ($mysqli= mysql_fetch_array($consulta)){
$nextid=$mysqli["consecutivoestudiante"]+1;
$_SESSION["id_registrado"]=$nextid;

la cuestion es aqui insertaria o donde y si luego actualizo o primero actualizo??
mysql_query ("UPDATE control SET consecutivoestudiante= ".$nextid." WHERE convocatoria_id=".$anio_convocatoria.";");
$mysqli=mysql_query ("commit();");
  #8 (permalink)  
Antiguo 17/03/2011, 12:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como puedo controlar ids en una base de datos innoDB

En MySQL los comandos que inician y terminan transacciones son START TRANSACTION y COMMIT. ROLLBACK las deshace (15.10. Bloqueo y modelo de transacciones de InnoDB).
Lo esencial es que deben usarse al inicio del conjunto completo de operaciones que deseas manejar como operación atómica.
Esto es especialmente importante cunado vas a hacer varios insert que deben ser puestos en secuencia, no tanto en un SELECT. En el SELECT es importante saber cuán importante es la vigencia de la información leída, y si se leerá la información como segura o insegura (de allí el dirty read).
En otras palabras, si estás leyendo datos que pueden ser modificados en el proceso y quieres prevenirlo, cuando el usuario en curso los modifique o mande a modificarlos, antes de hacerlo hay que iniciar una transacción, volver a consultar el registro, y según el caso realizar o no la modificación, para luego asentar el cambio.
¿Se entiende hacia dónde va la idea?
No es simplemente que abras y cierres transacciones. Tienes que considerar cómo proceder si la transacción que vas a usar a su vez entra cuando otra está ocurriendo y se inició después de tu lectura inicial.

Mucho de este "despiole" se debe plantear en un diagrama de flujo antes de empezar a programar. Si intentas hacerlo mientras programas tarde o temprano te vas a perder en el código.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 17/03/2011, 13:18
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo controlar ids en una base de datos innoDB

si entioendo pero en lo que cabe lo tengo bien claro lo que quiero es :
1.-obtener el valor de un campo de una tabla a la que llamo control que contiene el ultimo valor dal campo clave de otra tabla llamada estudiante.
2.- una vez obtenido sumarle 1 para insertar lo que vendria siendo mi siguiente registro de la tabla estudiante
3.- actualizar el valor del campo de la tabla control con el nuevo valor de la clave insertada he aqui el detalle de acuerdo a la transaccion que quiero realizar no se si ba primero el paso 2 o el 3 jejej si me di a explicar
  #10 (permalink)  
Antiguo 17/03/2011, 13:20
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo controlar ids en una base de datos innoDB

para lo cual entiendo que igual tengo ke hacer un bloqueo para que mientras obtengo el siguiente valor otro no obtenga este mismo
  #11 (permalink)  
Antiguo 17/03/2011, 13:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como puedo controlar ids en una base de datos innoDB

Cita:
1.-obtener el valor de un campo de una tabla a la que llamo control que contiene el ultimo valor dal campo clave de otra tabla llamada estudiante.
Por un lado, ¿necesita que sea numerico e incremental? Según el modelo relacional lo que necesitas es que sea único e irrepetible. Si puedes usar un dato propio de la persona la cosa se simplificaría mucho, como por ejemplo el número de documento de identidad.
Por otro lado, el valor lo consultas al inicio y luego lo vuelves a consultar cuando inicias la transacción para asegurarte que no se haya cambiado. ¿Cuál es la duda?
Cita:
2.- una vez obtenido sumarle 1 para insertar lo que vendría siendo mi siguiente registro de la tabla estudiante
3.- actualizar el valor del campo de la tabla control con el nuevo valor de la clave insertada he aqui el detalle de acuerdo a la transaccion que quiero realizar no se si ba primero el paso 2 o el 3 jejej si me di a explicar
SI vas a trabajar así, mejor usa autoincrementales. No tienes que consultar nada antes, sino insertar y luego recuperar el que se generó automáticamente, cosa que se puede hacer desde el propio PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 17/03/2011, 13:53
 
Fecha de Ingreso: febrero-2011
Ubicación: cd chetumal
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como puedo controlar ids en una base de datos innoDB

quemas quisiera cambiarlo a uto increment pero no puedo ya que asi tienen la base de datos y no puedo modificarla y pues la cuestion es realizar ese procedimiento mediante codigo para simular el auto increment si pudieras darme un ejemplo de como pudiera realizar dicha cosa obtener ids evitando concurrencia me seria de mucha ayuda XD de antemano gracias por leerme y or tomarte la molestia de contestarme

Etiquetas: controlar, ids, innodb
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:38.