![]() |
Duda con un select dentro de una Transaccion Hola colegas del foro, veran tengo el sig. codigo PHP sin terminar donde tomo una orden (de un restaurant) para esto consulto una tabla de control donde se va almacenando el consecutivo de la orden Código PHP: Habia utilizado siempre las transacciones para hacer updates o deletes, pero no para hacer selects si alguien pordria sacarme de la duda estare muy agradecido, en caso contrario tendre que hacer las pruebas :borracho: |
Re: Duda con un select dentro de una Transaccion Buenas, Si lo he entendido bien, el numero es un valor de una tabla. Por lo que si puede darse el caso que otro mesero coja el mismo numero. Por que lo haces asi? Para controlar el problema, puedes utilizar una funcion para que te de el numero, de forma que si alguien lo ha pillado ya lo puedes controlar. Otra opción que se me ocurre, aunque no me gusta, es bloquear la tabla cuando coges el numero de forma que mientras no la desbloquees nadie más puede coger el numero. Un saludo |
Re: Duda con un select dentro de una Transaccion Gracias por la respuesta, lo hago así por que es un modulo el que se esta programando y la estructura de la base de datos ya esta, es decir no fui yo quien dispuso esa manera de controlar el numero de orden siguiente. Eso de la función fue lo primero que pensé, pero ahí si no me quedaría duda sobre la posibilidad de obtener un numero incorrecto (por estar fuera de la transaccion) o tambien la posibilidad de crear otro campo a la tabla control para que me indique si alguien esta usando ese umero consecutivo, por eso hago ese select dentro de la transaccion, basándome en la definición siguiente: Cita:
Prometo postear los resultados en cuanto los tenga. P.D.T. No al hacer el Begin (aunque sea un select) ya se esta bloqueando esa tabla o habría que hacerlo de manera explicita? |
Re: Duda con un select dentro de una Transaccion Buenas, Una funcion siempre se ejecuta dentro de una transacción! Si dentro de la funcion haces el select y despues haces el update incrementando el valor. Como todo se ejecuta dentro de la misma transacción, ya tienes controlado el tema de la concurrencia. Hasta donde se, una select no hace un bloqueo exclusivo de un registro si no se le indica. No obstante, me has hecho dudas en un par de cosas, cuando tenga un rato hago unas pruebas y te comento. Un saludo |
| La zona horaria es GMT -6. Ahora son las 20:50. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.