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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.