MySQL 入門 - 概念

MySQL 入門 - 概念

1. それは何ですか?

MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに関して言えば、MySQL は最高の RDBMS (リレーショナル データベース管理システム) アプリケーション ソフトウェアの 1 つです。

1.1 RDBMS

RDBMS (リレーショナル データベース管理システム) の機能:

1. データは表形式で表示されます

2. 各行はレコード名です

3. 各列はレコード名に対応するデータフィールドです

4. フォームは多数の行と列から構成される

5. データベースは複数のフォームから構成される

1.2 MySQLデータベース

MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有するリレーショナル データベース管理システムです。 MySQL は、すべてのデータを 1 つの大きなウェアハウスに格納するのではなく、異なるテーブルにデータを格納するリレーショナル データベース管理システムであり、速度と柔軟性が向上します。

  • MySQL はオープンソースであり、現在は Oracle の製品です。
  • MySQL は非常に大規模なデータベースをサポートします。数千万件のレコードを含む大規模なデータベースを処理できます。
  • MySQL は標準の SQL データ言語形式を使用します。
  • MySQL は複数のシステムで実行でき、複数の言語をサポートします。これらのプログラミング言語には、C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、Tcl などが含まれます。
  • MySQL は、現在最も人気のある Web 開発言語である PHP を適切にサポートしています。
  • MySQL は、5,000 万レコードの大規模データベースとデータ ウェアハウスをサポートします。32 ビット システムでサポートされる最大のテーブル ファイルは 4 GB、64 ビット システムでサポートされる最大のテーブル ファイルは 8 TB です。
  • MySQL はカスタマイズ可能で、GPL プロトコルを使用します。ソース コードを変更して独自の MySQL システムを開発できます。

2. 動作メカニズム

2.1 全体アーキテクチャ図(C/Sアーキテクチャ)

  • クライアント:

MySQLサーバーに接続する機能を提供する共通ツールキット

  • サーバ:

MySQLインスタンス、実際にデータストレージとデータ処理機能を提供するMySQLサーバープロセス

  • mysqld:

MySQL サーバー デーモンはバックグラウンドで実行されます。クライアントのリクエストを管理します。 mysqld は、複数のセッションの接続、ポートのリッスン、および MySQL インスタンスの管理を可能にするマルチスレッド プロセスです。

  • MySQL メモリ割り当て:

MySQL に必要なメモリ領域は、innodb_buffer_pool_size (5.7.5 以降)、key_buffer_size など動的です。各セッションには固有の実行プランがあり、同じセッション スコープ内でのみデータ セットを共有できます。

  • セッション

各クライアント接続にはセッションが割り当てられ、セッションは動的に割り当てられ、リサイクルされます。クエリ処理に使用され、各セッションには同時にバッファがあります。各セッションはスレッドとして実行される

  • パーサー

SQL ステートメントの構文を検出し、各 SQL ステートメントの SQL_ID を生成します。ユーザー認証もこの段階で行われます。

  • オプティマイザ

効率的な実行プランを作成します (ストレージ エンジンによって異なります)。クエリが書き換えられます。たとえば、InnoDB には共有バッファがあるため、オプティマイザはまず事前にキャッシュされたデータから抽出します。テーブル統計オプティマイザーを使用すると、SQL クエリの実行プランが生成されます。この段階でユーザー権限のチェックも行われます。

  • メタデータキャッシュ

キャッシュオブジェクトのメタデータと統計

  • クエリキャッシュ

メモリ内で同じクエリ ステートメントを共有します。まったく同じクエリがキャッシュにヒットした場合、MySQL サーバーは結果をキャッシュから直接取得します。キャッシュはセッション間で共有されるため、あるクライアント用に生成された結果セットを別のクライアントで使用できます。クエリ キャッシュは SQL_ID に基づいています。ビューに SELECT ステートメントを書き込むことは、クエリ キャッシュの良い例です。

  • キーキャッシュ

キャッシュ テーブル インデックス。 MySQL キーはインデックスです。インデックス データのサイズが小さい場合は、インデックス構造とリーフ ノード (インデックス データを格納する) がキャッシュされます。インデックスが大きい場合は、MyISAMストレージエンジンによって通常使用されるインデックス構造のみがキャッシュされます。

2.2 ネットワークプロトコル

2.2.1 通信プロトコル

MySQL 5.7 では、TCP/IP、TLS/SSL、Unix ソケット、共有メモリ、名前付きパイプの 5 つのタイプがあります。これら 5 つのタイプの違いを見てみましょう。

方法デフォルトで有効サポートシステムこのマシンのみサポート電源の入れ方パラメータ設定
プロトコルはいすべてのシステムいいえ--skip-networking=はい/いいえ--port--bind-address
TLS/SSLはいすべてのシステム(TCP/IP ベース)いいえ–ssl=はい/いいえ--ssl-* オプション
Unix ソケットはいUnix系システムはい--socket= 閉じます--socket=ソケットパス
共有メモリいいえウィンドウズはい–共有メモリ=オン/オフ。 --共有メモリベース名=
名前付きパイプいいえウィンドウズいいえ--enable-named-pipe=オン/オフ--ソケット=

2.2.2 メッセージフォーマット

プロトコル ヘッダー:

各プロトコルヘッダーは4バイト

- パケットデータ長:

最初の 3 バイトは、データ部分の長さ (プロトコル ヘッダーを除く) を示します。3 バイトで表せる最大長は 16M-1 (2^24 - 1) です。送信するデータ部分がこの長さより大きい場合は、16M-1 の長さごとに 1 つのパケットとして展開する必要があります。受信側がデータを受信したときに、パケットの長さが 16M-1 であることを検出すると、長さが 16M-1 未満のデータ パケットが受信されるまで、さらにデータが続くことを意味します。これは、最後のパケットのデータ長が 0 になる可能性があることを意味します。

シリアルナンバー:

1 バイト、0 から始まり 1 ずつ増加します。新しい SQL が送信され、データベースが再接続されると、値は 0 にクリアされます (関数 sql/Net_serv.cc: net_clear)。

データタイプ:

固定長の整数や文字列に加えて、他の種類のデータもいくつかあります。 (固定長フィールド データの保存とアクセス: include/Mybyte_order.h: 値を intstore に保存、値を取得: intkorr、マルチバイト処理はリトルエンディアンの優先順位に基づきます)

     1. このタイプのデータへの可変長整数アクセスは、関数内にあります: sql-common/Pack.c: 整数を格納: net_store_length 整数を読み取り: net_field_length
        値が 251 未満の場合、値を 1 バイトで直接保存します。
       251<=値<2^16 の場合、3 バイトを使用して格納します。最初のバイトは 252 で、他の 2 バイトには整数コンテンツが格納されます。2^16<=値<2^24 の場合、4 バイトを使用して格納します。最初のバイトは 252 で、他の 3 バイトには整数コンテンツが格納されます。2^24<=値<2^64 の場合、9 バイトを使用して格納します。最初のバイトは 255 で、他の 8 バイトには整数コンテンツが格納されます。最初のバイトが 251 の場合、整数フィールドが null であることを意味します。
       最初のバイトが 255 の場合、このバイトは ERR パケットの最初のバイトであることを意味します。2. エンコード可能な長さの文字列 文字列の長さは、可変長の整数を使用してエンコードされます。

2.3 SQL構文

SQL は、データ操作言語 (DML) とデータ定義言語 (DDL) の 2 つの部分に分けられます。 SQL (Structured Query Language) は、クエリを実行するための構文です。しかし、SQL 言語には、レコードを更新、挿入、削除するための構文も含まれています。

クエリと更新の命令は、SQL の DML 部分を構成します。

SELECT - データベース テーブルからデータを取得します。UPDATE - データベース テーブルのデータを更新します。DELETE - データベース テーブルからデータを削除します。INSERT INTO - データベース テーブルにデータを挿入します。SQL のデータ定義言語 (DDL) 部分を使用すると、テーブルを作成または削除できます。インデックス (キー) を定義したり、テーブル間のリンクを指定したり、テーブル間に制約を課したりすることもできます。

SQL で最も重要な DDL ステートメント:

CREATE DATABASE - 新しいデータベースを作成しますALTER DATABASE - データベースを変更しますCREATE TABLE - 新しいテーブルを作成しますALTER TABLE - データベース テーブルを変更しますDROP TABLE - テーブルを削除しますCREATE INDEX - インデックス (検索キー) を作成しますDROP INDEX - インデックスを削除します

3. まとめ

この記事では、マクロと使用法の観点から MySQL とは何かについて説明します。これについては後ほど詳しく説明します。 123WORDPRESS.COMのその他のコンテンツにも注目してください。

以下もご興味があるかもしれません:
  • MySQL初心者のための基本操作のまとめ
  • MySQL 初心者ガイド - クイックリファレンス
  • MySQL 入門 - SQL 実行プロセス

<<:  Dockerでrabbitmqをデプロイする際に発生した2つの問題

>>:  シンプルなプログレスバーを作成するための HTML+CSS

推薦する

Linux パーティションまたは論理ボリュームにファイルシステムを作成する方法

序文システムにファイル システムを作成し、それを永続的または非永続的にマウントする方法を学習します。...

Linux 7.7 でスワップ パーティション SWAP を設定する方法

Linux システムの Swap パーティション、つまり swap パーティションは、一般に仮想メモ...

div ボックス モデルの使用経験の概要

ボックスモデルの計算<br />マージン + ボーダー + パディング + コンテンツC...

Vuex はシンプルなショッピングカート機能を実装します

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...

Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

目次1. 問題の説明2. 原因分析3. 解決策4. 処理1. 問題の説明調整センターでは、最後の 2...

Linux ユーザーとグループのコマンド例分析 [切り替え、ユーザーの追加、権限制御など]

この記事では、Linux のユーザーおよびグループのコマンドについて例を挙げて説明します。ご参考まで...

JSオブジェクトの走査順序の詳細な説明

JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかも...

docker ベースで Prometheus+Grafana を構築する手順の詳細説明

1. プロメテウスの紹介Prometheus は、もともと SoundCloud によって開発された...

vue-routerフック関数はルーティングガードを実装します

目次概要グローバルフック関数ルーティング固有のフック関数コンポーネント内のフック関数概要ルートガード...

HTML テーブルタグチュートリアル (19): 行タグ

<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...

MySQL ストレージエンジンの簡単な紹介

1. MySQL アーキテクチャストレージ エンジンを紹介する前に、まずは MySQL アーキテクチ...

Linux ブートシステム方式の分析

この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...

JavaScript で判決文をエレガントに記述する例

目次序文1. モナドの判断1.1 例1.2 オブジェクトに入れる1.3 マップに載せる2. 複数の判...

Linux の運用と保守で netstat の代わりに ss コマンドを使用する方法

序文Linux サーバーを操作および管理するときに、最もよく使用されるコマンドの 1 つが nets...

Mysql 8.0 のインストールとパスワードのリセットの問題

Mysql 8.0 のインストールの問題とパスワードのリセット1: MySqlをダウンロードする公式...