
PHPでMySQLテーブルロックされている一覧を取得したいですがどのようにすれば良いかご教授願います。
Web検索で調べるとロック状態はmysql_list_processesや、show processlistでも試してみましたが、思うような結果は得られませんでした。正常には動作していますが、欲しいデータが取り出せないですす。。。
単純に、現在ロックしているテーブル名(レコードロックは不要です。)を一覧で出力させることはできないのでしょうか?
PHPから実施できるやり方をご教授頂けると幸いです。
-------Test Program()---------
<?php
$link = mysql_connect('localhost', 'login_id', 'login_pass');
mysql_select_db('db_name');
mysql_query('LOCK TABLES table1 WRITE');
mysql_query('INSERT INTO table1 SET field1 = "test", field2 = "1"');
//$result = mysql_list_processes($link); 以下のSQL文とも入れ替えて試しました。
$result = mysql_query('show processlist');
while ($row = mysql_fetch_assoc($result)){
printf("%s %s %s %s %s %s %s %s\n", $row["Id"], $row["User"], $row["Host"], $row["db"],
$row["Command"], $row["Time"] , $row["State"], $row["Info"]);
}
mysql_free_result($result);
mysql_query('UNLOCK TABLES');
?>
No.1ベストアンサー
- 回答日時:
ロックを掛けた接続内では、ブロックされないので、ロック状況の取得は出来ないようです。
テスト状況を作るには、2つ以上の接続を作って、一つは、ロックしたままとする必要があるので、コマンドラインクライアントと、xampp(apache)などのhttpサーバー経由しphpでmysql接続とを駆使して、以下のようにしてみると、どのようにロックが行われているかを見ることが出来ます。
[1]. コマンドラインクライアントから、ロックする
> lock tables `xx_tbl` write;
[2]. phpで、上記ロックしたtableにアクセスするphpプログラム実行
select * from `xx_tbl`
しかし、writeロックがかかってるので、待機状態になり、結果は返ってこない
とりあえず、このウィンドウはこのままおいて
[3]. ブラウザの別ウィンドウまたは別のタブから、以下を発行するphpプログラム実行
show processlist;
→ 3スレッドが返ってくる
i: コマンドラインクライアントのスレッド、接続のままさわってなければ、sleep
ii: ロックテーブルにアクセス待機中スレッド、Stateカラム に waiting という記述、Infoカラムに、待機中クエリの内容
ブロックされたクエリが表示されるだけなので、from 句からロック中のテーブルを推測するしかできない。
iii: show processlist; を発行したスレッド。Infoカラムにそのクエリ
[4]. コマンドラインクライアント で、ロック解除
> unlock tables;
[2] のウィンドウをそのまま開いていれば、待機終了して、データ取得した結果が表示される。
ということで、ロック中のテーブルへさらに他からアクセスしている時しか、それを関知することはできないようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【初歩】ラジオボタンをつかっ...
-
エラー 1068 (42000): 複数の主...
-
SQLでカラムを追加し、条件に合...
-
mysqlがインストールされている...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
同一日に複数レコードがある場...
-
下記の問合せを行うクエリを、 ...
-
select *, `人口(男)`AND`人口(...
-
下記の問合せを行うクエリを、P...
-
同じテーブルを結合して前回の...
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLで漢字名称を都道府県や市区...
-
SQLです下記の問合せを行うクエ...
-
[1000地域 × 10カテゴリー = 1...
-
SQLについて教えて下さい。 SEL...
-
MySQLのテーブル作成でハイフン...
-
複数DBテーブルからのデータ取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のクエリを、まとめて実...
-
PHPでMySQLテーブルロック一覧取得
-
データベースの選択エラー
-
mysqlのデータベースの内容をph...
-
phpで複数のDBを使用した場合の...
-
mysqlのスマートな書き方
-
MySQLが動かない(テーブルレコ...
-
MySQLの更新が固まってしまう...
-
テーブルのデータをarray (arra...
-
トランザクションが効かない
-
mysqlのデータをperlで読み込ん...
-
緊急です。insert文が実行されない
-
phpでデーターベース編集
-
MySQLで合計と小計の計算方法を...
-
MySQLのINSERT文で変数展開がで...
-
C言語で変数の内容をINSERTする...
-
mysqliのコードは、どの文字が...
-
接続ができません
-
MySQLカラム名は日本語と英数字...
-
副問合せにLIKE文を使う方法は...
おすすめ情報