| |||
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 |
| ||||
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 |
| |||
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 |
| ||||
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) |
| |||
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 |
| |||
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();"); |
| ||||
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) |
| |||
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 |
| |||
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 |
| ||||
Respuesta: Como puedo controlar ids en una base de datos innoDB Cita: 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.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 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: 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. 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
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
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: |