Re: [PHP-ES] que tan confiable es mysql_insert_
[email protected] (Mauricio Cuenca)
| Newsgroups | php.general.es |
|---|---|
| Message-ID | <[email protected]> |
Puedes utilizar mysql_insert_id(), pero no te fíes de esa función. Tu aplicación simplemente no será escalable, qué sucederá si en otro proceso manejado por la misma instancia de la conexión se inserta otra fila en el intermedio de la operación de inserción y selección ? Claro, esto no va a pasar si tu base de datos es MyIsam porque la tabla estará bloqueada mientras se inserta, etc, etc. Mi punto es que pueden existir diversas variables inesperadas debido a la concurrencia, por ese motivo las bases de datos soportan transacciones y es la única manera de garantizar la integridad de los datos. Seguro mysql_insert_id() te puede funcionar perfectamente si tu aplicación es pequeña y no tendrá simultaneidad. Pero si optas por la solución rápida, es bueno que lo hagas teniendo en cuenta que existen soluciones más óptimas y estar preparado para llevarlas a cabo en caso de que sean necesarias. -- Mauricio On Dec 18, 2009, at 16:45, Philipp Keweloh <[email protected]> wrote: > El 18 de diciembre de 2009 16:32, hahmael <[email protected]> escrib > ió: > Si es muy cierto si no estoy mal desde la version cinco. y solo > Innodb es > transacional, pero como manejaria esto con PHP?.explico un poco > mejor en que > consiste todo.. > > Tengo la siguiente duda, poseo 3 tablas que corresponden a: > ------------------------------------------------------------- > 1. TABLE ORDENES > no_orden INT Primary Key > fecha_ordeb DATETIME > estado_orden VARCHAR > ---------------------------------------------------------------- > 2. TABLE DETALLES ORDENES > id_ordenes INT Primary Key > no_orden INT Foreign key > Cod_producto INT FK > ---------------------------------------------------------------- > 3.TABLE PRODUCTOS > Cod_producto INT PK > name_product VARCHAR > description_product TEXT > Costo_producto DECIMAL > Rank_producto INT > > --- > -------------------------------------------------------------------- > > La lógica es la siguiente un usuario realiza una orden, con una seri > e de > productos el usuario envía, el sistema genera una No de Orden el cua > l es un > valor único por lo tanto es una PK en table Ordenes, luego almacena > uno a > uno los productos que envía en la tabla Detalles la cual cada produc > to > estará relacionado con su numero de orden correspondiente, por lo ta > nto una > orden puede tener muchos detalles que realmente son productos ya > existentes, > la Duda radica en la generación de ese numero de orden, de que maner > a podría > generarlo, si dejo un autoincremente en INT estaria bien, pero > necesito > tener ese identificativo único al momento de crear para luego poder > realizar > el insert de productos de esa orden, pero para ello al momento de > realizar > la primera ejecución que es el insert ordenes debo conocer es ID sin > o no > podre insertas en detalles, esto evitando colisiones o que un > usuario tome > un numero de orden que no corresponde. > > Espero alguien pueda entenderme y orientarme, estoy un poco > confundido..espero no sea la cafeína. > > 2009/12/18 Mauricio Cuenca <[email protected]> > > > Recomiendo que hagas una transacción, así se garantiza la atomicid > ad de la > > operación. > > > > Ten en cuenta que las transacciones > > solo son soportadas en ciertas versiones de MySQL y usando el > motor InnoDB. > > > > -- > > Mauricio > > > > > > On Dec 18, 2009, at 8:12, hahmael <[email protected]> wrote: > > > > La funcion mysql_insert_id.. en una base de datos a la que van a > acceder > >> multiples clientes sea confiable esta función de PHP..?. > >> > >> con que otras funciones podemos trabajar, para devolver un valor > >> autoincrement desconocido generado despues de un insert, para luego > >> insertarlo en otra tabla, ? > >> > >> -- > >> Agradecido. > >> > >> Hahmael Tâher. > >> > > > > > -- > Agradecido. > > Hahmael Tâher. > > > Será la cafeína, ¿conoces mysql_insert_id [1]? > > [1] http://es.php.net/mysql_insert_id > > -- > Philipp Keweloh > > "Si lo que vas a decir no es más bello que el silencio: no lo digas. > " Proverbio árabe