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

推薦する

面接でよく聞かれる Vue 修飾子 13 個

目次1. 怠惰な2.トリム3.番号4.停止5. キャプチャ6.自分7.一度8.予防する9.ネイティブ...

WeChatアプレットはシンプルな手書き署名コンポーネントを実装します

目次背景:必要:効果1. アイデア2. 実装1. ページとスタイル2. 初期化3. クリックすると4...

Reactはラジオコンポーネントのサンプルコードを実装します

この記事の目的は、最も明確な構造を使用していくつかのコンポーネントの基本機能を実装することです。皆さ...

Linux カーネルの探究: Kconfig の秘密

Linux 構成/ビルド システムがどのように機能するかを深く理解します。 Linux カーネル構成...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

mysql5.7.21 utf8 エンコーディングの問題と Mac 環境での解決方法

1. 目標: mysql の character_set_server の値を latin1 から ...

MySQLの暗黙的な変換問題の解決

1. 問題の説明 root@mysqldb 22:12: [xucl]> テーブル t1\G ...

WeChatミニプログラムをTencent Mapsに接続する2つの方法

最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...

MySQL テーブル自動増分 ID オーバーフロー障害レビュー ソリューション

問題: MySQLテーブル内の自動増分IDのオーバーフローによりビジネスブロックが発生した背景: t...

ニューススタイルのウェブサイトデザイン例25選

bmi ボイジャーピッチフォークアルスター食料品店チャウ真/斜めポスタこれは偽のDIYですクリエイテ...

Vue は小数点付きの星評価を実装します

この記事では、小数点付きの星評価を実装するためのVueの具体的なコードを参考までに共有します。具体的...

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

カルーセルの制作方法を実現するjs

この記事では、カルーセル画像の表示を実現するためのjsの具体的なコードを参考までに共有します。具体的...

JSは星を消すケースを実現する

この記事の例では、星を消すためのJSの具体的なコードを参考までに共有しています。具体的な内容は次のと...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...