この記事では、トランザクション、インデックス、ロックなどの MySQL の知識ポイントの原理と使用法を例を使用して説明します。ご参考までに、詳細は以下の通りです。 取引
トランザクションは、一連のアトミック SQL クエリ、または独立した作業単位です。データベース エンジンが一連の操作ステートメントを実行すると、すべての操作が実行されます。いずれかの操作がクラッシュしたり、その他の理由で実行できない場合は、すべてのステートメントは実行されません。つまり、トランザクション内のすべてのステートメントは、正常に実行されるか、すべて失敗します。
索引
インデックスは、ストレージエンジンのユーザーがレコードを素早く見つけられるようにするデータ構造です。例えば、 userId = 1 の場合、userName を user から選択します。 userId 列にインデックスを追加すると、MySQL はインデックスを使用して userId の行を検索します。つまり、MySQL は最初に値でインデックスを検索し、次にその値を含むすべてのデータ行を返します。
ロックここでは主にダウンリンクレベルのロックについて説明します。
MyISAM エンジンは、テーブル全体をロックするものと理解できます。同時に読み取ることはできますが、同時に書き込むことはできません。ロック期間中、他のプロセスはテーブルに書き込むことができません。書き込みロックの場合、他のプロセスは読み取りできません。
エンジン INNODB では、レコードの 1 行がロックされ、同時に読み取ることはできますが、同時に書き込むことはできません。行レベルのロックはオーバーヘッドが高く、ロックが遅く、デッドロックが発生する可能性があります。ロックの粒度は最小で、ロック競合の可能性は最も低く、同時実行性は最も高くなります。
InnoDB はデフォルトで行レベル ロックを実行するため、MySQL は主キーが明示的に指定されている場合にのみ行ロックを実行します。それ以外の場合、MySQL はテーブル ロックを実行します。 例1: (主キーを明示的に指定し、そのようなレコードがある場合は行ロック) SELECT * FROM products WHERE id='3' FOR UPDATE; SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE; 例 2: (主キーを明示的に指定します。そのようなレコードが見つからない場合は、ロックは実行されません) SELECT * FROM products WHERE id='-1' FOR UPDATE; 例 3: (主キーなし、テーブルロック) SELECT * FROM products WHERE name='Mouse' FOR UPDATE; 例 4: (主キーが不明、テーブルロック) SELECT * FROM products WHERE id<>'3' FOR UPDATE; 例 5: (主キーが不明、テーブルロック) SELECT * FROM products WHERE id LIKE '3' FOR UPDATE; 注 1: FOR UPDATE は InnoDB にのみ適用可能であり、有効にするにはトランザクション ブロック (BEGIN/COMMIT) で実行する必要があります。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: リアクトルーティングガード(ルーティングインターセプション)の実装
CS: ...コードをコピーコードは次のとおりです。 html,body{ margin:0px; ...
目次jupyterをインストールするDocker ポートマッピングjupyterをインストールするp...
目次序文1. 準備 - サーバーとnginxの使用1. サーバーを準備する2. nginxをインスト...
この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...
序文CSS がフロントエンド開発の基本的なスキルであるならば、「セレクター」は基礎中の基礎です。これ...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
Web 開発では、次のような文字によく遭遇します: これは実際には HTML が...
ここ2日間ちょっと忙しくて、公式アカウントも数日更新が止まってしまいました。その結果、何人かの読者か...
この記事では主に CentOS 上で MySQL マスタースレーブサーバーを構築する方法を紹介します...
この記事では、例を使用して、MySQL インデックスがソートに与える影響を説明します。ご参考までに、...
序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...
目次1. 次のコードはwatchの簡単な使用法です2. 即時監視3. ハンドラメソッド4. 深い属性...
目次序文仮想リストとは何ですか?デモ効果準備スクリーンの高さとボックスの高さ最適化要約する序文人気の...
目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...
flex は 2009 年のリリース以来、ほぼすべてのブラウザでサポートされています。シンプルでレス...