#クエリ文と更新文の一連の実行処理も同様のステップを経ます。記事の写真を簡単に見てみましょう:
" class="lazyload" src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d529960ec1dd496ca90860641bcaa093~tplv-k3u1fbpfcp-watermark.image" data- style="max-width:90%" data- style="max-width:90%">
まず、ステートメントを実行する前にデータベースに接続する必要があります。これは、最初のステップ: テーブルが更新されると、このテーブルに関連するクエリ キャッシュが無効になるため、通常は 10 月のクエリ キャッシュは推奨されません。 次に、アナライザーは構文分析と字句分析を実行します。これが更新ステートメントであることがわかった後、オプティマイザーは使用するインデックスを決定し、次にエグゼキューターが特定の実行を担当します。まずこれを見つけます。行、アップデートを実行します。 クエリ ステートメントの更新とは異なり、更新プロセスには 2 つの重要なログも含まれます。これについては前の記事でも紹介しました。興味がある場合は、先週の記事「MySQL の 2 つの」ログ システムを参照してください。 』については、ここではあまり紹介しません。 簡単な例を通じて更新操作プロセスを分析してみましょう。 まず主キー ID と整数フィールド c:mysql> create table demo T (ID int primarty ,c int);复制代码を持つテーブルを作成します。次に、ID=2
mysql> update table demo set c = c + 1 where ID = 2;复制代码## の行の値に 1 を加算します。 #Next update ステートメントの実行プロセスを見てみましょう。図の明るいボックスはストレージ エンジンでの実行を表し、色付きのボックスはエグゼキューターでの実行を表します。
最後に、redolog を作成する際に、準備とコミットという 2 つのステップがあることがわかります。これは、よく「2 フェーズ コミット」と呼ばれるものです。
ログに「2 段階の送信」が必要なのはなぜですか?
REDO ログと binlog はそれぞれストレージ エンジンとエグゼキューターのログであるため、2 つの独立したロジックです。2 段階の送信を使用しない場合、どちらを先に送信しても問題が発生します。そしてどれを後で提出するか。上の例を見てみましょう。ID=2 の行の現在の値が 0 であるとします。更新プロセス中に最初のログが書き込まれた後、2 番目のログが書き込まれていない間にクラッシュが発生します。どうなりますか? ?
mysql ビデオ チュートリアル
以上がMySQL データベースで SQL が実行される仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。