There are functions to lock, but at the rate of consult, there is no record locking features to lock tables only ( LOCK TABLES/UNLOCK TABLES ), is done is to simulate a lock
GET_LOCK() can run again, after release or when your connection is terminated (either normal or abnormal). The locks obtained with GET_LOCK () does not interact with transactions. That is, committing a transaction does not release the locks it has obtained in the transaction.
This feature can be used to implement application locks or to simulate record locks. The names are locked on the server. If a name has been blocked by a client, GET_LOCK () locks any request by another client for a lock with the same name. It is advisable for these situations to lock dbname.str
GET_LOCK( str, interval )
Intenta obtener un bloqueo con un nombre dado por la cadena str, con intervalo de espera interval en segundos. Retorna 1 si el bloqueo se obtiene con éxito, 0 si el intento ha agotado el tiempo (por ejemplo, porque otro cliente ya ha bloqueado el nombre), o NULL si ocurre un error. Si hay un bloqueo obtenido con GET_LOCK (), se libera cuando se ejecuta RELEASE_LOCK ().
Intenta obtener un bloqueo con un nombre dado por la cadena str, con intervalo de espera interval en segundos. Retorna 1 si el bloqueo se obtiene con éxito, 0 si el intento ha agotado el tiempo (por ejemplo, porque otro cliente ya ha bloqueado el nombre), o NULL si ocurre un error. Si hay un bloqueo obtenido con GET_LOCK (), se libera cuando se ejecuta RELEASE_LOCK ().
Podra ejecutar una nueva GET_LOCK (), despues de liberarlo o cuando su conexión termina (ya sea normal o anormal). Los bloqueos obtenidos con GET_LOCK () no interactúan con las transacciones. Es decir, confirmar una transacción no libera los bloqueos que haya obtenido en la transacción.
Esta función se puede utilizar para implementar bloqueos de aplicaciones o simular bloqueo de registros. Los nombres se bloquean en el servidor. Si un nombre ha sido bloqueada por un cliente, GET_LOCK () bloquea cualquier petición de otro cliente para bloquear con el mismo nombre. Es recomendable para estas situaciones hacer bloqueos dbname.str
Try to get a lock with a name given by the string str, with timeout interval in seconds. Returns 1 if the lock was successfully, 0 if the attempt timed out (for example, because another client has already locked the name), or NULL if an error occurs. If there is a lock obtained with GET_LOCK (), is released when running RELEASE_LOCK ().GET_LOCK() can run again, after release or when your connection is terminated (either normal or abnormal). The locks obtained with GET_LOCK () does not interact with transactions. That is, committing a transaction does not release the locks it has obtained in the transaction.
This feature can be used to implement application locks or to simulate record locks. The names are locked on the server. If a name has been blocked by a client, GET_LOCK () locks any request by another client for a lock with the same name. It is advisable for these situations to lock dbname.str
RELEASE_LOCK( str )
Libera el bloqueo asignado a la cadena str obtenida con GET_LOCK (). Retorna 1 si el bloqueo se libera, 0 si el bloqueo no fue establecido por este hilo (en cuyo caso el bloqueo no se libera), y NULL si el nombre de bloqueo no existiera.Releases the lock assigned to the string obtained GET_LOCK() str. Returns 1 if the lock was released, 0 if the lock was not established by this thread (in which case the lock is not released) and NULL if the lock name does not exist
Ejemplo/Sample:
si queremos bloquear un registro en la tabla customer, customer.ID = 4
if we want lock a record in customer table, customer.ID = 4
SELECT GET_LOCK( 'customer.4', 120 )
usando en Dolphin / using Dolphin
oQry = oServer:Query( "SELECT GET_LOCK( 'customer.4', 120 ) AS locked" )
? oQry:locked
oQry = oServer:Query( "SELECT RELEASE_LOCK( 'customer.4' ) AS unlocked" )
? oQry:unlocked
IS_FREE_LOCK( str )
Comprueba si el nombre de bloqueo str está libre para uso. Retorna 1 si el bloqueo está libre (nadie lo esta usando), 0 si el bloqueo está en uso, y NULL si se produce un error (como argumentos incorrectos).Checks whether the lock named str is free to use. Returns 1 if the lock is free (no one is using the lock), 0 if the lock is in use, and NULL if an error occurs (such as an incorrect argument).
IS_USED_LOCK( str )
Comprueba si el nombre de bloqueo str está en uso. Si es así, devuelve el identificador de conexión del cliente que tiene el bloqueo.De lo contrario, devuelve NULL.Checks whether the lock named str is in use. If so, it returns the connection identifier of the client that holds the lock. Otherwise, it returns NULL.
Daniel,
ResponderEliminarPor lo que entiendo entonces, se puede conseguir el mismo efecto ni que simules el bloqueo. El servidor nos dara un true/false el hecho de simular dicha accion.
Que diferencia a nivel logica de aplicacion tendria un ?:
(cAlias)->( DbSeek(4))
(aAlias)->(Rlock())
de un
oMysql:Rlock( 'CUSTOMER.4')
Entiendo entonces que podriamos utilizar el mismo concepto...
Interesante... :-)
El signo de interrogacion simplemnetre muestra en pantalla el contenido de la variable
ResponderEliminar