![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数行のクエリを、まとめて実...
-
トランザクションが効かない
-
C言語で変数の内容をINSERTする...
-
接続ができません
-
副問合せにLIKE文を使う方法は...
-
ERROR 1045 (28000) (using pas...
-
MySQLのテーブル作成でハイフン...
-
SQLのVARCHARとVARCHAR2の違い
-
参考書に従って入力したつもり...
-
MySQLカラム名は日本語と英数字...
-
INT型は金額の型に使用するべき...
-
【php+mysql】mysqlのレコード...
-
VBAで変数内に保持された二次配...
-
mysqlがインストールされている...
-
Float型の時の計算結果がおかしい
-
急に文字化けを起こすようにな...
-
MySQLのLOAD DATA INFILEコマン...
-
c言語でMySQLを利用するときの...
-
windows上のphpにおける全角ハ...
-
MYSQLサービス停止時にWindows...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のクエリを、まとめて実...
-
phpで複数のDBを使用した場合の...
-
PHPでMySQLテーブルロック一覧取得
-
トランザクションが効かない
-
C言語で変数の内容をINSERTする...
-
show databasesコマンドが効かない
-
MySQLのテーブルのデータ数のカ...
-
the right syntax to use near ...
-
データベースの選択エラー
-
Warning: mysql_num_rows()
-
MySQLが動かない(テーブルレコ...
-
select文で見つからない場合の結果
-
MySQLのINSERT文で変数展開がで...
-
緊急です。insert文が実行されない
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
副問合せにLIKE文を使う方法は...
-
MySQLカラム名は日本語と英数字...
-
ODP.NETのバージョン確認
-
旧filemakerで和暦(令和など)...
おすすめ情報