Saltar al contenido

MySQL: la tabla ‘my_table’ no estaba bloqueada con Lock Tables

Román, parte de este gran equipo, nos ha hecho el favor de crear este escrito ya que conoce a la perfección dicho tema.

Solución:

Si en una sesión bloqueó una mesa pero desea seleccionar de otra mesa, debe bloquear esa mesa también o desbloquear todas las mesas.

mysql> LOCK TABLES t1 READ;
mysql> SELECT COUNT(*) FROM t1;
+----------+
| COUNT(*) |
+----------+
|        3 |
+----------+
mysql> SELECT COUNT(*) FROM t2;
ERROR 1100 (HY000): Table 't2' was not locked with LOCK TABLES

La solución para mí fue desbloquear las tablas. Habían sido bloqueados por consultas anteriores que fallaron antes de llegar al unlock tables declaración.

UNLOCK TABLES
SELECT ...

http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html

MySQL permite que las sesiones de los clientes 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. Esto se explica con más detalle más adelante en esta sección.

LOCK TABLES adquiere explícitamente bloqueos de tablas para la sesión actual del cliente. Los bloqueos de tabla se pueden adquirir para tablas base o vistas. Debe tener el privilegio LOCK TABLES y el privilegio SELECT para bloquear cada objeto.

Para el bloqueo de vistas, 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 BLOQUEAR TABLAS, todas las tablas utilizadas en activadores también se bloquean implícitamente, como se describe en la Sección 13.3.5.2, “BLOQUEAR TABLAS y activadores”.

UNLOCK TABLES libera explícitamente cualquier bloqueo de tabla retenido por la sesión actual. LOCK TABLES libera implícitamente cualquier bloqueo de tabla retenido por la sesión actual antes de adquirir nuevos bloqueos.

Otro uso de UNLOCK TABLES es liberar el bloqueo de lectura global adquirido con la declaración FLUSH TABLES WITH READ LOCK, que le permite bloquear todas las tablas en todas las bases de datos. Consulte la Sección 13.7.6.3, “Sintaxis de FLUSH”. (Esta es una forma muy conveniente de obtener copias de seguridad si tiene un sistema de archivos como Veritas que puede tomar instantáneas a tiempo).

Sintaxis para LOCK y UNLOCK

 LOCK TABLES
    tbl_name [[AS] alias] lock_type
    [, tbl_name [[AS] alias] lock_type] ...

lock_type:
    READ [LOCAL]
  | [LOW_PRIORITY] WRITE

P.ej:-

LOCK TABLE t WRITE, t AS t1 READ;

Desbloquear mesas

 UNLOCK TABLES

Al final de todo puedes encontrar las observaciones de otros creadores, tú además eres capaz insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *