データベースのロック機構について
1. データベースはどのようにロックされますか? 単純な SQL ステートメント
SELECT username
,passwd
FROM g_test
LIMIT 1 FOR UPDATE
通常のクエリの後に FOR UPDATE を追加すると、データベースがロックされますか?
2. FOR UPDATE ロック書き込みを追加すると、このステートメントは DELETE に有効になりますか?
3. MYISAM はテーブル全体をロックしていますか?
4.InnoDB は行ロックですか?
新しい質問
5. データベースがトランザクションを開いてロックを追加したが、何らかの理由で後続の操作が完全に完了せず、コミットもロールバックも行われない場合、トランザクションにタイムアウト メカニズムはありますか?ロックにはタイムアウト機構がありますか?期限切れになると自動的に破棄されます
返信内容:
1. データベースはどのようにロックされますか? 単純な SQL ステートメント
SELECT username
,passwd
FROM g_test
LIMIT 1 FOR UPDATE
通常のクエリの後に FOR UPDATE を追加すると、データベースがロックされますか?
2. FOR UPDATE ロック書き込みを追加すると、このステートメントは DELETE に有効になりますか?
3. MYISAM はテーブル全体をロックしていますか?
4.InnoDB は行ロックですか?
新しい質問
5. データベースがトランザクションを開いてロックを追加したが、何らかの理由で後続の操作が完全に完了せず、コミットもロールバックも行われない場合、トランザクションにタイムアウト メカニズムはありますか?ロックにはタイムアウト機構がありますか?期限切れになると自動的に破棄されます
他の回答者が言ったことは十分に包括的ではないので、あなたのために整理させてください。
まず第一に、さまざまなデータベースメカニズム (特に MySQL などのプラグインストレージエンジンを備えたデータベース) について話す前に、使用するストレージエンジンを宣言する必要があると思います。そうしないと、ここでの質問は無意味であると仮定します。 , 2つの質問はinnoDBストレージエンジンに基づいており、私の理論もinnoDBエンジンに基づいています。
概念を明確にしてください。ロックには次の 2 種類があります:
読み取りロック -> 共有ロック (S)
書き込みロック -> 排他ロック (X)
書き込み操作の排他ロック、
理論的には、 、操作されたオブジェクト (id = 1 の行など) に排他ロックがある限り、この行を操作できるトランザクションを除き、他のトランザクションは、行が行であるかどうかに関係なく、この行に対して操作を実行する権利を持ちません。読み取り操作または書き込み操作
ちなみに、select .. for update は SQL 仕様に属さないので、実際には避けるべきです。
select ..for update は排他的ロック操作を実行しますが、このステートメントはトランザクション内でのみ意味を持ちます。非トランザクション状況で使用すると、ロック操作とロック解除操作が一度に完了し、実際的な意味はありません。もう 1 つの非常に重要な点は、innoDB は REPEATABLE READ および READ COMMITTED の分離レベルでのトランザクション操作で行レベルのロックを直接使用せず、代わりにオプティミスティック メカニズム MVCC を使用することです。つまり、ほとんどの読み取り操作はロックを必要としません。書き込みロックは必要な行のみをロックします 「MVCC について」
1.「更新用の g_test LIMIT 1 からのユーザー名、パスワードの選択」はロックされていますか?
はい、行レベルの排他ロックが追加されます。2.「更新の書き込みロックは削除ステートメントに対して有効ですか?」 さらに更新には書き込みロック(つまり排他ロック)があり、もちろん削除にも有効です(削除は操作できません)が、それでも上記の観点から、REPEATABLE READおよびREAD COMMITTEDのトランザクション操作ではMVCCが使用されますfor update exclusive lock ステートメントを使用した後でも、他のトランザクションが読み取り操作を実行できることに驚かれるかもしれません。
3.「MyISAM はテーブル全体をロックしていますか?」
はい、MyISAM ストレージ エンジンにはテーブル レベルのロックしかありません
4.「InnoDB は行レベルのロックですか?」
完全に正しくありません。innoDB には行レベルのロックとテーブルレベルのロックがありますが、デフォルトでは行レベルのロックになります。
トランザクション自体にはタイムアウト機構はありませんが、テーブルのロックによりトランザクションがタイムアウトした場合はロールバックされます。デフォルトの innodb ロック タイムアウトは 50 秒で、これは変数 innodb_lock_wait_timeout を設定することで実現されます。5.「トランザクションとロックにはタイムアウトメカニズムがありますか?」
MYISAM ロックはテーブル全体を対象とします。InnoDB ロックは 1 行のレコードを対象とした行ロックです。
SELECT username, passwd FROM g_test LIMIT 1 FOR UPDATE は、FOR UPDATE が追加された場合に複数のプロセスが同時に SQL クエリを実行することを防ぎます。 、ロックされるため、別のプロセスがキューに登録され、前のプロセスの実行が完了するまで待機します。つまり、同時実行です。最も重要な点は、ロックはトランザクション内、つまり SQL 実行の中に配置する必要があるということです。最初にトランザクションをオープンします。
InnoDB は 2 フェーズ ロック プロトコルを使用します。ロックはトランザクション実行中いつでも実行できます。ロックはコミットまたはロールバックが実行された場合にのみ解放され、すべてのロックが同時に解放されます。 InnoDB は、必要に応じて分離レベルに基づいて自動的にロックします。これは暗黙的なロックです。
InnoDB は特定のステートメントによる明示的なロックもサポートしています:
select ... 共有モードでのロック (共有ロック)
select ... 更新用 (排他的ロック)
さらに、MySQL はこれをサポートします。サーバー層 lock tables および unlock tables ステートメントは、ストレージ エンジンとは何の関係もありません。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。
