Título: myisam control referencial? Publicado por: Kase en 15 Mayo 2011, 04:07 am que es mas optimo para llevar el control referencial...
bloquear tabla -> insertar -> get last id -> desblokear tabla usar el valor optenido de last insert id en otra insercion, consulta o lo que sea... o mysql_last_id () que devuelve el ultimo valor insertado? esto me genera una duda, y es si devuelve el ultimo valor de un query, o se tiene que ejecutar un metodo espesifico para insertar... volviendo a sql.. sera posible blokear y desblokear tablas durante un procedimiento? que metodo utilizan para mantener la integridad en myisam en el siguiente ejemplo: bd: usuario {datos tipicos de usuario} producto {tipico del producto, stock} usuariohistorial{usuario,producto,cantidad,fecha} el proceso es que cuando un usuario compra un producto, este deve descontarse de producto y añadirse en el historial del usuario. ya sea una solucion con puro sql o con php (o con codeigniter si es posbile) mi problema es que nunca e usado myisam, e preferido innoDB por tener referencias, pero ahora empiezo con proyectos en los que innoDB me es muy pesado. Título: Re: myisam control referencial? Publicado por: Kase en 17 Mayo 2011, 04:09 am como mencionaron ase unos post atras...
mysql_insert_id() devuelve el utimo valor generado en el script Citar <?php ejecutenlo en 2 navegadores distintos para hacer la prueba$link = mysql_connect('localhost', 'prueba', '12345'); mysql_select_db('prueba'); mysql_query("INSERT INTO prueba (prueba) values ('prueba')"); sleep(20); printf("Last inserted record has id %d\n", mysql_insert_id()); ?> otra solucion para los que no usan php es blokear tabla insertar get max(id) desblokear tabla tiene que ser con get max(id) por que last_insert_id() es global Título: Re: myisam control referencial? Publicado por: [u]nsigned en 17 Mayo 2011, 16:49 pm A lo mejor no entendi bien, pero para que necesitas control referencial?
Podes simplemente restar 1 a la cantidad de productos en stock (producto.stock) mientras se cumpla que el stock del mismo sea mayor a 0, y luego en la misma consulta agregar dicho producto a la tabla de historial de usuario. UEl problema es que MyISAM no soporta transacciones. Pero existe una libreria en PHP para emularlas (http://www.deepbluesky.com/blog/-/myisam-transactions_20/). Podrias probar algo asi, pero usando esa libreria para emular transacciones y evitar errores de escritra/lectura. Código
Saludos |