7

スクリプト1。

$query_ = "lock tables test1 as test11 write";
mysql_query($query);
$query_ = "select * from test11";
sleep(20);
$query_ = "unlock tables";
mysql_query($query_);

スクリプト2。

$query_ = "select * from test1";
$result = mysql_query($query_);

問題は、最初のスクリプトの実行中に2番目のスクリプトを実行した場合です。テーブルロックされていません。そして、私はそれからどんなデータでも読むことができます。

ロックしてエラーを返す必要があります。

これを機能させる方法は?

4

4 に答える 4

9

他の人にそのテーブルにアクセスさせたくない場合は、

LOCK TABLES test1 WRITE;

他のスクリプトはエラーを返しませんが、ロックが解除されるまで待機します。

それが役に立てば幸い...

于 2012-08-29T13:45:31.883 に答える
6

readテーブルを-でロックしています。$query_ = "lock tables test1 as test11 read";これは、他のクエリでも問題なくテーブルを読み取ることができることを意味します(関連リンク-ロックタイプのセクションまでスクロールダウンします)。

readロックタイプに関する情報:

  • ロックを保持しているセッションは、テーブルを読み取ることができます(ただし、書き込むことはできません)。
  • 複数のセッションが同時にテーブルのREADロックを取得できます。
  • 他のセッションは、READロックを明示的に取得せずにテーブルを読み取ることができます。

テーブルを赤くするなど、他のことをやめたい場合は、次のようにロックを使用する必要がありますwrite

$query_ = "lock tables test1 as test11 write";
于 2012-08-29T13:43:15.720 に答える
2

データベースユーザーにロックテーブルの権限を付与する必要があります。

于 2014-12-30T08:36:07.660 に答える
1

あなたはロックが何をするかについて誤解しています。他のスクリプトがデータにアクセスするのを妨げないようにロックします。代わりに、他のスクリプトがデータにアクセスするタイミングに影響を与えます。スクリプト2は、ロックのために許可されていないデータにアクセスまたは変更しようとすると、一時停止してロックが解除されるのを待ちます。スクリプト1がテーブルのロックを解除した後、スクリプト2は問題なく続行し、完了します。

于 2015-11-09T16:33:41.763 に答える