mysqlのlock unlock tables


プロジェクトがますます大きくなるにつれて、累積需要はますます多くなります.単純なニーズにのみ使用される単一DBアーキテクチャは、DB容量からも読み書き同時ベアラ能力からもすでに困難である.最近、ビジネス別のDB分割を開始せざるを得なくなり、ロジックは各種の連結テーブルから単一テーブルへのクエリー分割が完了すると、現ネットワークデータベースへの移行に関連します.データベースの移行が現在のネットワーク・ビジネスに与える影響を最小限に抑えるために、移行中に関連するビジネス・テーブルをロックして書き込みを禁止します(読み取り可能であり、読み取り関連のビジネス・ロジックには影響しません).使用される文:
lock tables table_name read;
lock tables table_name write;
unlock tables;

理解:まず、MySQLのクライアントリンクを介して、スレッドAにあると理解できます.そしてlock tablesの後、ユーザのコンテキスト環境は、独立した空間Bに入る.ユーザがunlock tablesを呼び出したり、スレッドAを終了したりすると、独立空間Bが消えることがわかります.実行状況:ユーザが独立空間B内にいる場合、ユーザはtable_にアクセスできないname以外の表は、次のように間違っています.
  1:ERROR 1100 (HY000): Table 't_others' was not locked with LOCK TABLES

このとき他の独立空間Bの外にいるユーザは、table_name以外のテーブルは、読み書きに影響しません.ロックモード:
モード/シーン
read
write
独立空間B内読み
table_name読み取り可能、t_othersエラー1
table_name読み取り可能、t_othersエラー1
独立空間B内書き
table_nameエラー2,t_othersエラー1
table_name書き込み可能、t_othersエラー1
独立空間B外読み
table_name読み取り可能、t_others読み取り可能
table_name等の独立空間B破棄、t_others読み取り可能
独立空間B書き込み
table_name等の独立空間B破棄、t_others書き込み可能
table_name等の独立空間B破棄、t_others書き込み可能
  2:ERROR 1099 (HY000): Table 'table_name' was locked with a READ lock and can't be updated

このような特性に基づいて使用する場合は簡単です.
lock tables table_name read;##    

##      sql  
##          ,      
##          ,      ,           

unlock tables;##    ,   

補足:もちろん、プロジェクトデータの移行時に4つのテーブルが同時に移行するなど、操作に関連するテーブルが1つ以上ある場合があります.この場合の書き方は以下の通りです.
lock tables table1_name read,tables2_name read,tables3_name read,tables4_name read;
unlock tables;

一度に複数のテーブルをロックすることをサポートします.もちろんread、writeは混在することができます.