MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで複数のテーブルをロックする方法は?


LOCK TABLESコマンドを使用して、複数のテーブルロックを実現できます。構文は次のとおりです-

LOCK TABLES yourTableName1 WRITE;
LOCK TABLES yourTableName2 WRITE;
LOCK TABLES yourTableName3 WRITE;
LOCK TABLES yourTableName4 WRITE;
.
.
.
N;

テーブルロックはトランザクションセーフではなく、2番目のテーブルをロックしようとする前に、最初にアクティブなトランザクションを暗黙的にコミットします。

テーブルOrderDemo-

があるとしましょう
mysql> create table OrderDemo
   -> (
   -> OrderId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> OrderPrice int,
   -> OrderDatetime datetime
   -> );
Query OK, 0 rows affected (0.66 sec)

これは、テーブルOrderDemoとutfdemoをロックするためのクエリです。 utfdemoは、サンプルデータベースにすでに存在しています。クエリは次のとおりです-

mysql> LOCK TABLES OrderDemo WRITE;
Query OK, 0 rows affected (0.03 sec)
mysql> LOCK TABLES utfdemo WRITE;
Query OK, 0 rows affected (0.07 sec)

これで、セッションのテーブルがロックされます。テーブルを作成しようとすると、エラーが発生します。

エラーは次のとおりです-

mysql> create table LockTableDemo
   -> (
   -> UserId int,
   -> UserName varchar(10)
   -> );
ERROR 1100 (HY000): Table 'LockTableDemo' was not locked with LOCK TABLES
mysql> create table UserIformation
   -> (
   -> UserId int,
   -> UserName varchar(10)
   -> );
ERROR 1100 (HY000): Table 'UserIformation' was not locked with LOCK TABLES

これを修正するには、MySQLを再起動する必要があります。


  1. MySQLテーブルをバッチ更新する方法は?

    最初にテーブルを作成しましょう- mysql> create table DemoTable    -> (    -> BreakfastTime time    -> ); Query OK, 0 rows affected (0.59 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable values('7:30:45'); Query OK, 1 row affected (0.19 sec) my

  2. MySQLにテーブルが存在するかどうかを検出するにはどうすればよいですか?

    テーブルの存在を検出するには、INFORMATION_SCHEMA.TABLESの概念を使用します。構文は次のとおりです- select table_name from information_schema.tables where table_schema=database() and table_name=yourTableName; 上記の構文を理解するために、テーブルを作成しましょう- mysql> create table DemoTable2032    -> (    -> ClientId int,   &n