-2

誰でも2つのphpスクリプトを使用してmysqlテーブルロックをテストできますか?そしてmysql_query()。

1日試しましたが、テーブルをロックできませんでした。

1つのphpスクリプトがmysqlテーブルを使用する場合、他のすべてのスクリプトはそれにアクセスできないようにしたいです。

2つの簡単なテスト済みのphpスクリプトを提供できますか。そして、彼らがオンラインでどのように機能するかを示すことができれば、それは完璧でしょう。

ただし、最初のスクリプトが機能してmysqlテーブルをロックするときに、他のスクリプトがその順番を待つようにする必要があります。

キューのように、同時にmyisammysqlテーブルにアクセスできるのは1つのスクリプトだけです。しかし、私は多くのアドバイスを試しましたが、何も機能しないため、答える前にスクリプトをテストしてください。

4

3 に答える 3

1

トランザクションレベルで複雑なdbロジックを管理することを目的としていない場合は、dbテーブルを明示的にロックすることはお勧めしません。クエリは引き続き送信されますが、ロックが原因で失敗するか、間違ったタイミングで取得されたロックが原因で他のトランザクションがデッドロックになります。

結果として、あなたはアプリケーションのパフォーマンスの類似性をタンクに入れたいと思っています。

編集:

http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html

mysqlのドキュメントには、ロックがどのように機能するかについての詳細な説明があります。ロックはそれを使用するセッションに対して取得されるため、セッションが特定のテーブルとエイリアスにアクセスできないようにする場合は、セッションへのアクセスを拒否するテーブル以外のすべてをロックする必要があります。

例として、どのロックをテストしたいかわからない。

       define("READ_LOCK", 0)
       define("WRITE_LOCK",1) 
       function lock_on_to_tables ($Tables, $lockType=0)
       {
         $sql = "LOCK TABLES "
        foreach ($Tables as $table)
           $sql .=  $table . " ,";
         $sql = substr($sql, 0, -1); // cut off last comma
         $sql .= $lockType ? " WRITE" : " READ;
         mysqli_query($sql); // or pdo or whatever is in use.  
       }

ロックを解除するだけです

  mysqli_query("UNLOCK TABLES") ;
于 2012-08-30T22:13:31.950 に答える
1

PHPでテーブルをロックしません。mysqlクエリでロックします。つまり、基本的にはmysqldocsで説明されている構文でクエリを実行します。それだけです。例えば:

mysqli_query("LOCK TABLES my_table READ");

そして、またはmysql_に賛成してドロップmysqli_PDO

于 2012-08-30T22:04:15.630 に答える
1

ロックには2種類あります。1つは@WebnetMobile.comが投稿したものです。

もう1つはアドバイザリーロックと呼ばれます。フラグを立てると、アクセスを許可する前に全員がフラグを確認する必要があります。それを必要とするあらゆる場所で旗をチェックするのはあなた次第です。ただし、利点は、ニーズに合わせてロックを正確に調整できることです。

また、InnoDBを使用すると、テーブル全体をロックせずに、テーブルの特定の行をロックできます。

参照:http ://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

于 2012-08-30T22:06:29.637 に答える