序文 ロックは、複数のスレッドを実行するときにリソースへのアクセスを強制的に制限するために使用される同期メカニズムです。データベース ロックは、ロックの粒度に応じて、行レベル ロック、テーブル レベル ロック、ページ レベル ロックに分類できます。 行レベルロック 行レベル ロックは、MySQL で最も粒度の細かいロック メカニズムです。つまり、現在操作されている行のみがロックされます。行レベル ロックの競合の可能性は非常に低く、粒度も最も小さいですが、ロックのコストは最も高くなります。行レベル ロックは、共有ロックと排他ロックに分けられます。 特徴: オーバーヘッドが高く、ロックが遅く、デッドロックが発生する可能性があります。ロックの粒度が小さく、ロックの競合の可能性が最も高く、同時実行性も高くなります。 実施原則: InnoDB の行ロックは、インデックス項目をロックすることによって実装されます。これは、MySQL や Oracle とは異なります。後者は、データベース内の対応するデータ行をロックすることによって実装されます。InnoDB の行レベル ロックでは、行レベル ロックはインデックス条件を通じてデータを取得する場合にのみ使用できます。それ以外の場合は、テーブル レベルのロックが直接使用されます。特記事項: 行レベルロックを使用する場合は、インデックスを使用する必要があります 例えば: テーブル構造を作成する テーブル「developerinfo」を作成します( `userID` bigint(20) NULLではない、 `name` varchar(255) デフォルト NULL, `passWord` varchar(255) デフォルト NULL, 主キー (`userID`)、 キー `PASSWORD_INDEX` (`passWord`) BTREE の使用 )ENGINE=InnoDB デフォルト文字セット=utf8; データの挿入 `developerinfo` に VALUES ('1', 'liujie', '123456') を挿入します。 `developerinfo` に VALUES ('2', 'yitong', '123') を挿入します。 `developerinfo` に VALUES ('3', 'tong', '123456') を挿入します。 (1)主キーインデックスを使用してデータベースを照会し、行ロックを使用する テスト用に3つのコマンドラインウィンドウを開く
mysql> 自動コミットを 0 に設定します。 クエリは正常です。影響を受けた行は 0 行です mysql> userid = '1' の場合、developerinfo から * を選択して更新します。 +--------+--------+----------+ | ユーザーID | 名前 | パスワード | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ セット内の1行 |mysql> 自動コミットを 0 に設定します。 クエリは正常です。影響を受けた行は 0 行です mysql> userid = '1' の場合、developerinfo から * を選択して更新します。 wait|mysql> 自動コミットを 0 に設定します。 クエリは正常です。影響を受けた行は 0 行です mysql> userid = '3' で developerinfo から * を選択して更新します。 +--------+------+----------+ | ユーザーID | 名前 | パスワード | +--------+------+----------+ | 3 | トング | 123456 | +--------+------+----------+ セット内の1行 |mysql> コミット; クエリは正常です。影響を受けた行は 0 行です。mysql> select * from developerinfo where userid = '1' for update; +--------+--------+----------+ | ユーザーID | 名前 | パスワード | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ セット内の1行 (2)行ロックを使用してデータベースを照会するためにインデックスのないフィールドを照会する テスト用に2つのコマンドラインウィンドウを開きます
|mysql> 自動コミットを 0 に設定します。 クエリは正常です。影響を受けた行は 0 行です mysql> select * from developerinfo where name = 'liujie' for update; +--------+--------+----------+ ユーザーID 名前 パスワード +--------+--------+----------+ 1 六十六 123456 +--------+--------+----------+ セット内の 1 行 |mysql> set autocommit=0; クエリは正常です。影響を受けた行は 0 行です mysql> select * from developerinfo where name = 'tong' for update; 待ってください| mysql> コミット; クエリは正常です。影響を受けた行は 0 行です。mysql> select * from developerinfo where name = 'liujie' for update; +--------+--------+----------+ | ユーザーID | 名前 | パスワード | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ セット内の1行
mysql> 自動コミットを 0 に設定します。 クエリは正常です。影響を受けた行は 0 行です mysql> developerinfo から * を選択します。パスワード = '123456 ' 更新用; +--------+--------+----------+ | ユーザーID | 名前 | パスワード | +--------+--------+----------+ | 1 | liujie | 123456 | | 3 | トング | 123456 | +--------+--------+----------+ 2 行目: set mysql> set autocommit =0; クエリは正常です。影響を受けた行は 0 行です mysql> userid = '1' の場合、developerinfo から * を選択して更新します。
mysql> 自動コミットを 0 に設定します。 クエリは正常です。影響を受けた行は 0 行です mysql> userid = '2 の developerinfo から * を選択します ' 更新用; +--------+--------+----------+ | ユーザーID | 名前 | パスワード | +--------+--------+----------+ | 2 | イートン | 123 | +--------+--------+----------+ セット内の1行 コミット; mysql> select * from developerinfo where userid = '1' for update; +--------+--------+----------+ | ユーザーID | 名前 | パスワード | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ セット内の1行
要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vue を使用した Amap アプリケーション開発のベスト プラクティス
>>: Win10 に Tomcat サーバーをインストールし、環境変数を構成する詳細なチュートリアル (画像とテキスト)
序文vue3.0 が正式にリリースされて以来、多くの友人が vue3.0 に切り替えました。ここでは...
目次先読みと後読みをキャプチャグループと組み合わせる捕獲グループと非捕獲グループ前を向いて、後ろを振...
目次レンダリングAPIの変更レンダリング関数のパラメータレンダリング関数のシグネチャの変更VNode...
1. イメージをプルするdocker pull registry.cn-hangzhou.aliyu...
目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...
通常、CSS セレクターは上から下に選択し、親要素を介して子要素を選択します。では、子要素を介して親...
この記事の例では、WeChatアプレットの下部ナビゲーションバーコンポーネントの具体的な実装コードを...
Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...
パート 1 SSH ポート転送の概要カフェで無料Wi-Fiを利用しているとき、誰かがあなたのパスワー...
導入HTML は、Web ドキュメントのコンテンツのコンテキスト構造と意味を提供します。HTML 自...
この記事では、Xshell と関連する構成の一般的な問題について説明します。この記事の構成は、主に ...
文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...
目次1. JavaScriptはHTMLでキャンバスを使用する2. ページストレージ技術1. Jav...
「mysqlは内部コマンドではありません」というエラーは、mysqlのbinディレクトリパスが環境変...
背景事業が発展するにつれ、会社の事業内容や規模は拡大し続け、ウェブサイトには大量のユーザー情報やデー...