ホームページ >バックエンド開発 >PHPチュートリアル >PHPでmysql行ロックを実行する方法

PHPでmysql行ロックを実行する方法

WBOY
WBOYオリジナル
2016-06-23 13:20:581791ブラウズ

行をロックするには、
require_once ("config.inc.php"); //データベース接続

mysql_query("BEGIN"); ( "SELECT * FROM `news` where id=1 for update ");
echo "test"?> 次に、IE ウィンドウでこのステートメントを実行すると、実行結果が正常に表示されます

ウィンドウを開いて phpmyadim を開き、SQL ステートメントを実行します

delete FROM `news` where id=1

実際には、ロックが成功しなかったことを示す最初の行を削除しました、

php ではどのように書けばよいでしょうか?



ディスカッションへの返信 (解決策) ストレージ エンジンで FOR UPDATE を使用する場合、クエリ検証の対象となる行は、現在のトランザクションが終了するまで書き込みロックされます。

明らかに、あなたのテストは説明された状況を満たしていません


ストレージ エンジンで FOR UPDATE を使用する場合、クエリ検証の対象となる行は、現在のトランザクションが終了するまで書き込みロックされます。

明らかにあなたのテストは説明された状況を満たしていません

返信してくれたモデレーターに感謝します。今私にとって最も重要なことは、php での書き方がわからないということです。上記の書き方は正しいですか?

主にPHPで悲観的なロック行を記述する方法を知りたいです。友達を助けてください


あなたが書いたことは間違っていませんが、あなたが合格したテストは間違っています ロック (テーブル ロック、行ロック) は現在の接続でのみ有効であり、接続が閉じられるとロックは解除されます

あなたのテストデザインはこうあるべき プログラムaが実行中

SELECT * FROM `news` where id=1 for update
、プログラムbが実行中
delete FROM `news` where id=1

この程度はわかりにくい、またそうなる早すぎるか遅すぎるか、いいえ


あなたが書いたことは間違っていませんが、合格したテストは間違っています
ロック (テーブル ロック、行ロック) は現在の接続でのみ有効であり、接続が閉じられるとロックは解除されます

テスト設計はプログラム a が実行している中にあるはずです

SELECT * FROM `news` where id=1 for update
、プログラム b が実行中です
delete FROM `news` where id=1

この程度は把握するのが難しいですが、早すぎても遅すぎてもうまくいきません


モデレータさん、ありがとうございます。自分が書いた内容が大丈夫だと分かっていれば良いでしょう

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。