Die Funktion
        store_lock()
        wird vor allen Lese- und Schreibvorgängen aufgerufen.
      
        Bevor die Sperre dem Tabellensperren-Handler hinzugefügt wird,
        ruft mysqld die Funktion
        store_lock() mit den erforderlichen Sperren
        auf. Die Funktion kann das Ausmaß der Sperrung ändern, also
        beispielsweise eine blockierende Schreibsperre in eine
        nichtblockierende umwandeln, die Sperre ignorieren (wenn keine
        MySQL-Tabellensperren benutzt werden sollen) oder Sperren für
        viele Tabellen hinzufügen (wie es bei Verwendung eines
        MERGE-Handlers getan wird).
      
        Berkeley DB stuft beispielsweise blockierende Tabellensperren
        vom Typ TL_WRITE zu nichtblockierenden
        TL_WRITE_ALLOW_WRITE-Sperren herab (ein
        Hinweis darauf, dass zwar WRITE-Operationen
        stattfinden, aber dennoch andere lesende und schreibende
        Prozesse zugelassen sind).
      
        Auch beim Aufheben von Sperren wird
        store_lock() aufgerufen. In diesem Fall
        muss in der Regel nichts weiter veranlasst werden.
      
        Wenn store_lock das Argument
        TL_IGNORE bekommt, bedeutet das, dass MySQL
        vom Handler verlangt, dasselbe Ausmaß der Sperrung wie beim
        letzten Mal zu speichern.
      
        Die möglichen Sperrentypen sind in
        includes/thr_lock.h definiert und werden
        hier noch einmal aufgeführt:
      
enum thr_lock_type
{
         TL_IGNORE=-1,
         TL_UNLOCK,			             /* SPERREN AUFHEBEN */
 	  TL_READ,			               /* Lesesperre */
 	  TL_READ_WITH_SHARED_LOCKS,  
         TL_READ_HIGH_PRIORITY,      /* Hat Priorität vor TL_WRITE. Nebenläufige Einfügeoperationen zulässig*/
         TL_READ_NO_INSERT, 		     /* READ, nebenläufige Einfügeoperationen unzulässig */
         TL_WRITE_ALLOW_WRITE, 		   /*	Schreibsperre, aber andere Threads dürfen lesen/schreiben. */
         TL_WRITE_ALLOW_READ,        /*	Schreibsperre, aber andere Threads dürfen lesen/schreiben. */
         TL_WRITE_CONCURRENT_INSERT, /* WRITE-Sperre, die von nebenläufigen Einfügeoperationen benutzt wird. */
         TL_WRITE_DELAYED,  		     /* Schreibvorgang, der von INSERT DELAYED verwendet wird.  READ-Sperren zulässig */
         TL_WRITE_LOW_PRIORITY,	     /* WRITE-Sperre mit geringerer Priorität als TL_READ */
         TL_WRITE,          		     /* Normale WRITE-Sperre */
         TL_WRITE_ONLY               /* Jede neue Sperranforderung wird mit einem Fehler abgebrochen*/
};  
Der tatsächliche Umgang mit Sperren hängt von der Implementierung Ihrer Sperren ab. Sie können alle, einige oder gar keine der geforderten Sperrentypen implementieren und eigene Methoden verwenden, wo es Ihnen passend erscheint. Im Folgenden sehen Sie eine Minimalimplementierung für eine Speicher-Engine, die keine Sperren herabstufen muss:
THR_LOCK_DATA **ha_tina::store_lock(THD *thd,
                                     THR_LOCK_DATA **to,
                                     enum thr_lock_type lock_type)
{
   if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK)
     lock.type=lock_type;
   *to++= &lock;
   return to;
}  
        Eine komplexere Implementierung finden Sie unter
        ha_berkeley::store_lock() und
        ha_myisammrg::store_lock().
      
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

