03/09/2003, 21:56
|
O_O | | Fecha de Ingreso: enero-2002 Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses Puntos: 129 | |
En toda BD en sí .. la "concurrencia" se solventa con "transacciones" (como ya han dicho) .. Mysql no las soporta de "maravilla" pero algo hace (bloquear tablas) ...
Ese "bloque de tablas" .. evitará que sea accedida una tabla (o mejor aún un registro si el RDBMS lo permite .. Mysql no todavía) en un proceso de escritura por ejemplo ... (depende donde y cuando bloqueemos la tabla/campo y cuando lo liberemos).
ejemplo:
Usuario A .. hace un listado (SELECT) antes de entrar usuario B a editar un registro de ese listado ... En ese caso .. si pretende editar el registro X en el instante que el usuario B está -fisicamente- guardando ese regitro en la BD .. evitará que lo haga.
Lo que se suele hacer en estos casos es bloquear el registro en cuestion que es editado/borrado sólo en el instante que se va guardar fisicamene el registro en la BD (sobre todo si tomamos algún "iD" por el camino de otra tabla para actualizar dicho registro) ...
No es normal bloquear los "SELECT .. etc" de una tabla mientras que "fulanito" se le ocurre terminar de editar un registro .. Si lo editó antes de que otro usuario lo borrara .. y lo guarda (el registro) se creará uno nuevo (es obio que esto ha de suceder si el sistema tiene un alto tráfico sobre un mismo registro) ...
Lo que si se puede es hacer consultas constantes para verificar que el dato es consistente (que existe) .. En el ejemplo anterior .. Si al editar (al pretender hacer un "UPDATE" de un registro) leo el "ID" (cualquier identificador del registro que lo identifique cómo único) .. puedo hacer un "SELECT" antes de mi "UPDATE" definitivo para ver si todavía existe ese ID que pretendo actualizar y en su defecto mostrar un mensajito tipo "este ID que está actualizando .. fué borrado por menganito" .. e incluso si guardamos fecha/hora del ultimo "UPADATE" .. podriamos decir algo como "menganito editó este mensaje en el instante que estubo editando UD. este registro" (eso actualizando un campo fecha/hora para ese registro justo al acceder al registro para editarlo ..). Con esos "avisos" ya se tomarán las acciones pertinenetes (actualizar de todas formas .. crear registro nuevo .. etc).
En ese punto .. las "transacciones" es donde nos ayudaran a que si hacemos ese "SELECT .. seguido del UPDATE" sea realmente ese "ID" que existe o fué borrado .. pues solo en ese instante (microsegundos) bloquearíamos el registro/tabla para que no se peuda editar/borrar dicho registro.
Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |