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 TABLESdebes 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 TABLESlas 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 TABLEScompromete 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.