テーブルロックを待機しているセッションを終了するために、KILL
          を安全に使用できます。項8.5.6.4. 「KILL 構文」
          を参照してください。
        
          INSERT DELAYED
          で使用しているテーブルはロックしないでください。挿入は、ロックを保持するセッションではなく、別のスレッドによって処理される必要があるため、この場合の
          INSERT DELAYED
          はエラーになります。
        
          一部の操作では、mysql
          データベース内のシステムテーブルにアクセスする必要があります。たとえば、HELP
          ステートメントにはサーバー側のヘルプテーブルの内容が必要であり、また
          CONVERT_TZ()
          でタイムゾーンテーブルを読み取る必要がある場合があります。MySQL
          5.1.17
          より前のバージョンでは、LOCK
          TABLES
          ステートメントが有効な間にこのような操作を実行するには、必要なシステムテーブルも明示的にロックする必要があります。そうしないと、ロックエラーが発生します。5.1.17
          の時点では、システムテーブルの明示的なロックが必要なくなるように、サーバーが必要に応じてシステムテーブルを読み取りに対して暗黙的にロックします。これらのテーブルは、先に説明したように処理されます。
        
mysql.help_category mysql.help_keyword mysql.help_relation mysql.help_topic mysql.proc mysql.time_zone mysql.time_zone_leap_second mysql.time_zone_name mysql.time_zone_transition mysql.time_zone_transition_type
          LOCK TABLES
          ステートメントを使用して、これらのいずれかのテーブルに対する
          WRITE
          ロックを明示的に取得する場合は、そのテーブルが、ロックされる唯一のテーブルである必要があります。同じステートメントで、ほかのテーブルをロックすることはできません。
        
          通常、単一の
          UPDATE
          ステートメントはすべて不可分であるため、テーブルをロックする必要はありません。現在実行されている
          SQL
          ステートメントを、ほかのセッションが妨げることはできません。しかし、テーブルをロックすることが利益をもたらす場合もいくつかあります。
        
              MyISAM
              テーブルセット上でたくさんの操作を行おうとしているのであれば、利用する予定のテーブルをロックしたほうが操作が速くできます。UNLOCK
              TABLES がコールされるまで、MySQL
              はロックされたテーブルのキーキャッシュをフラッシュしないので、MyISAM
              テーブルをロックすると、挿入、更新、削除のスピードを速くします。通常、キーキャッシュは各
              SQL
              ステートメントのあとでフラッシュされます。
            
              テーブルロックのマイナス面は、READ
              によってロックされたテーブルをどのセッションも更新できず
              (ロックを保持しているセッションを含む)、ロックを保持しているセッションを除き、WRITE
              によってロックされたテーブルにどのセッションもアクセスできない点です。
            
              非トランザクションストレージエンジンに対してテーブルを使用している場合、SELECT
              と UPDATE
              の間にテーブルがほかのセッションによって変更されないようにするには、LOCK
              TABLES
              を使用する必要があります。ここに表されている例は、安全に実行するために
              LOCK TABLES
              を必要とします。
            
LOCK TABLES trans READ, customer WRITE; SELECT SUM(value) FROM trans WHERE customer_id=some_id; UPDATE customer SET total_value=sum_from_previous_statementWHERE customer_id=some_id; UNLOCK TABLES;
              LOCK TABLES
              を使用しない場合は、SELECT
              ステートメントと
              UPDATE
              ステートメントの実行の間に、別のセッションによって
              trans
              テーブルに新しい行が挿入される可能性があります。
            
          多くの場合、相対更新
          (UPDATE customer SET
          )
          または
          value=value+new_valueLAST_INSERT_ID()
          関数を利用することで、LOCK
          TABLES
          の利用を避けることができます。Transactions and Atomic Operations
          を参照してください。
        
          ユーザーレベルの通知ロック機能
          GET_LOCK() と
          RELEASE_LOCK()
          を利用することで、テーブルのロックを避けることができる場合があります。これらのロックははサーバー内のハッシュテーブルの中に保存され、スピードを速くする目的で
          pthread_mutex_lock() と
          pthread_mutex_unlock()
          を利用して実施されます。項7.11.4. 「その他の関数」
          を参照してください。
        
ロックの規定に関しての更なる情報は 項4.3.1. 「内部ロック方法」 を参照してください。

