InnoDB implementa un bloqueo a nivel de fila
        estándar, donde hay dos tipos de bloqueos:
      
            Compartido (Shared) (S) le
            permite a una transacción leer una fila.
          
            Exclusivo (Exclusive) (X) le
            permite a una transacción actualizar o eliminar una fila.
          
        Si una transacción A sostiene un
        bloqueo exclusivo (X) sobre una tupla
        t, entonces una solicitud de otra
        transacción B para establecer un
        bloqueo de cualquier tipo sobre t no
        puede ser atendida inmediatamente. En lugar de eso, la
        transacción B debe esperar a que la
        transacción A libere el bloqueo en
        la tupla t.
      
        Si la transacción A sostiene un
        bloqueo compartido (S) sobre una
        tupla t, entonces
      
            Una solicitud de otra transacción
            B para un bloqueo
            X sobre
            t no puede ser atendido
            inmediatamente.
          
            Una solicitud de otra transacción
            B para un bloqueo
            S sobre
            t puede ser atendido
            inmediatamente. En consecuencia, tanto
            A como
            B sostendrán un bloqueo
            S sobre
            t.
          
        Adicionalmente, InnoDB soporta
        bloqueo de granularidad múltiple (multiple
        granularity locking), el cual permite que existan
        simultáneamente bloqueos en registros y bloqueos en tablas
        enteras. Para hacer práctico el nivel de bloqueo de
        granularidad múltiple, se emplean tipos adicionales de bloqueo,
        llamados bloqueos de intención (intention
        locks). Los bloqueos de intención son bloqueos de tabla en
        InnoDB. La idea detrás de los mismos es que
        una transacción indique qué tipo de bloqueo (compartido o
        exclusivo) requerirá más tarde sobre una fila de esa tabla. En
        InnoDB se utilizan dos tipos de bloqueos de
        intención (asumiendo que la transacción
        T ha solicitado un bloqueo del tipo
        indicado en la tabla R):
      
            Intención compartida (Intention shared)
            (IS): La transacción
            T trata de establecer bloqueos
            S en tuplas individuales de la
            tabla T.
          
            Intención exclusiva (Intention exclusive)
            (IX): La transacción
            T trata de establecer bloqueos
            X en las tuplas.
          
Luego, el protocolo de bloqueo de intención es el siguiente:
            Antes de que de una determinada transacción logre un
            bloqueo S en una determinada
            fila, primero debe conseguir establecer un bloqueo
            IS o superior en la tabla que
            contiene a la fila.
          
            Antes de que de una determinada transacción logre un
            bloqueo X en una determinada
            fila, primero debe conseguir establecer un bloqueo
            IX en la tabla que contiene a la
            fila.
          
Estas reglas pueden resumirse convenientemente por medio de una matriz de compatibilidad entre tipos de bloqueo:
| X | IX | S | IS | - | |
| X | N | N | N | N | S | 
| IX | N | S | N | S | S | 
| S | N | S | S | S | S | 
| IS | N | S | S | S | S | 
| - | S | S | S | S | S | 
        Por lo tanto, los bloqueos de intención solamente bloquean
        solicitudes sobre tablas completas (Ej: LOCK TABLES ...
        WRITE). El propósito principal de
        IX y IS es
        mostrar que alguien está bloqueando una fila, o va a bloquear
        una fila en la tabla.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

