No dudes en compartir nuestra web y códigos en tus redes sociales, ayúdanos a aumentar nuestra comunidad.
Sintaxis
LOCK TABLE[S] tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... [WAIT n|NOWAIT] lock_type: READ [LOCAL] | [LOW_PRIORITY] WRITE | WRITE CONCURRENT UNLOCK TABLES
Descripción
Él Tipo de bloqueo puede ser uno de:
Opción | Descripción |
---|---|
LEER | Bloqueo de lectura, no se permiten escrituras |
LEER LOCAL | Leer bloqueo, pero permitir inserciones simultáneas |
ESCRIBE | Bloqueo de escritura exclusivo. Ninguna otra conexión puede leer o escribir en esta tabla |
ESCRITURA DE PRIORIDAD BAJA | Bloqueo de escritura exclusivo, pero permita nuevos bloqueos de lectura en la tabla hasta que obtengamos el bloqueo de escritura. |
ESCRIBIR CONCURRENTE | Bloqueo de escritura exclusivo, pero permite bloqueos de LECTURA LOCAL en la tabla. |
MariaDB permite que las sesiones del cliente adquieran bloqueos de tablas explícitamente con el fin de cooperar con otras sesiones para acceder a las tablas, o para evitar que otras sesiones modifiquen las tablas durante los períodos en los que una sesión requiere acceso exclusivo a ellas. Una sesión puede adquirir o liberar bloqueos solo para sí misma. Una sesión no puede adquirir bloqueos para otra sesión ni liberar bloqueos retenidos por otra sesión.
Los bloqueos se pueden usar para emular transacciones o para obtener más velocidad al actualizar tablas.
LOCK TABLES
adquiere explícitamente bloqueos de tabla para la sesión actual del cliente. Los bloqueos de tabla se pueden adquirir para tablas base o vistas. Usar LOCK TABLES
debes tener la LOCK TABLES
privilegio, y el SELECT
privilegio para cada objeto a bloquear. Ver GRANT
Para el bloqueo de vista, LOCK TABLES
agrega todas las tablas base utilizadas en la vista al conjunto de tablas que se bloquearán y las bloquea automáticamente. Si bloquea una tabla explícitamente con LOCK TABLES
las tablas utilizadas en los desencadenadores también se bloquean implícitamente, como se describe en Desencadenadores y bloqueos implícitos.
UNLOCK TABLES libera explícitamente cualquier bloqueo de tabla retenido por la sesión actual.
MariaDB comenzando con 10.3.0
ESPERAR/NO ESPERAR
Configure el tiempo de espera de bloqueo. Vea ESPERAR y NO ESPERAR.
Limitaciones
LOCK TABLES no funciona cuando se usa el clúster de Galera. Puede experimentar fallas o bloqueos cuando se usa con Galera.
LOCK TABLES funciona en tablas XtraDB/InnoDB solo si la variable del sistema innodb_table_locks está configurada en 1 (el valor predeterminado) y la confirmación automática está configurada en 0 (1 es el valor predeterminado). Tenga en cuenta que no se devolverá ningún mensaje de error en LOCK TABLES con innodb_table_locks = 0.
LOCK TABLES
compromete implícitamente la transacción activa, si la hay. Además, iniciar una transacción siempre libera todos los bloqueos de tablas adquiridos con LOCK TABLES. Esto significa que no hay forma de tener bloqueos de tabla y una transacción activa al mismo tiempo. Las únicas excepciones son las transacciones en modo de confirmación automática. Para preservar la integridad de los datos entre tablas transaccionales y no transaccionales, se puede utilizar la función GET_LOCK().
Mientras una conexión mantiene un bloqueo de lectura explícito en una tabla, no puede modificarla. Si lo intenta, se producirá el siguiente error:
ERROR 1099 (HY000): Table 'tab_name' was locked with a READ lock and can't be updated
Mientras una conexión mantiene un bloqueo explícito en una tabla, no puede acceder a una tabla no bloqueada. Si lo intenta, se producirá el siguiente error:
ERROR 1100 (HY000): Table 'tab_name' was not locked with LOCK TABLES
Mientras una conexión mantiene un bloqueo explícito en una tabla, no puede emitir lo siguiente: INSERT DELAYED, CREATE TABLE, CREATE TABLE … LIKE y declaraciones DDL que involucren vistas y programas almacenados (excepto disparadores). Si lo intenta, se producirá el siguiente error:
ERROR 1192 (HY000): Can't execute the given command because you have active locked tables or an active transaction
LOCK TABLES
no se puede usar en rutinas almacenadas; si lo intenta, se producirá el siguiente error en la creación:
ERROR 1314 (0A000): LOCK is not allowed in stored procedures
Ver también
- DESBLOQUEAR TABLAS
El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido por adelantado. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o cualquier otra parte.
Aquí tienes las reseñas y valoraciones
Te invitamos a añadir valor a nuestro contenido informacional participando con tu experiencia en las crónicas.