PHP 開発の基本的なチュート...LOGIN

PHP 開発の基本的なチュートリアルのタイプ、文字セット、エンジン、インデックス

データ型

MySQL はデータを保存します。データであればデータの種類を特定させていただきます。テーブルのフィールドには特定のデータ型が指定されています。次に、対応するデータ型を挿入データで使用する必要があります。また、データ型の長さの要件に従ってください。

MySQLでは、データ型を次の型に分けます:

  • 数値型(整数、浮動小数点)

  • 文字列型

  • 日付と時刻型

  • 複合型

整数型

88.png


整数型の長さが異なり、実際の使用プロセスもPHPアカデミーです。

MySQL は、オプションの表示幅インジケーターの形式で SQL 標準を拡張し、データベースから値を取得するときに、値を指定された長さまで延長できるようにします。たとえば、フィールドのタイプを INT(6) として指定すると、データベースから取得するときに 6 桁未満の値が自動的にスペースで埋められます。幅インジケーターを使用しても、フィールドのサイズや格納できる値の範囲には影響しないことに注意してください。

注:

  • テーブルフィールドを作成するとき、性別を表すために符号なしの tiny int を使用できます。女性を表すには 0 を使用し、男性を表すには 1 を使用します。不明を表すには 2 を使用します。

  • 同じことが人間の年齢にも当てはまります。テーブルフィールドを作成するときに符号なし整数を使用できます。なぜなら、実際に使用される人間の年齢には負の数

  • がないからです。私たちのビジネスで保存する必要がある最大の価値は何ですか。テーブルを作成するときは、そのような値を格納するタイプを選択します。

浮動小数点型

89.png


注:

浮動小数点は不正確な値であり、不正確さが存在します

そして10進数は固定小数点数と呼ばれます。内部的には、MySQL は基本的に文字列として保存されます。実際の使用において、金額や金額の精度に対する要求が比較的高い浮動小数点数ストレージがある場合は、10 進数 (固定小数点数) 型を使用することをお勧めします。

文字タイプ

90.png


*CHAR * 型は固定長文字列に使用され、かっこ内のサイズ修飾子を使用して定義する必要があります。このサイズ修飾子の範囲は 0 ~ 255 です。指定した長さより大きい値は切り捨てられ、指定した長さより小さい値はスペースで埋められます。
*VARCHAR * 長さが不足しない場合は、このサイズを値のサイズとして扱います。一方、VARCHAR 型はそれを最大値として扱い、文字列を格納するために実際に必要な長さのみを使用します。
型はスペースで埋められませんが、インジケーターより長い値は切り捨てられます。 VARCHAR 型は実際の内容に基づいて格納される値の長さを動的に変更できるため、フィールドに必要な文字数が不明な場合に VARCHAR 型を使用すると、ディスク領域を大幅に節約し、ストレージ効率を向上させることができます。

Text タイプと BLOB タイプ フィールド長の要件が 255 を超える場合のために、MySQL は TEXT と BLOB の 2 つのタイプを提供します。これらはすべて、保存されたデータのサイズに基づいて異なるサブタイプを持ちます。これらの大きなデータは、テキスト ブロックや、画像やサウンド ファイルなどのバイナリ データ タイプを保存するために使用されます。

TEXT 型と BLOB 型には、分類と比較に違いがあります。 BLOB 型では大文字と小文字が区別されますが、TEXT では大文字と小文字が区別されません。サイズ修飾子は、さまざまな BLOB および TEXT サブタイプでは使用されません。

Time 型

91.png


注:

Time 型は、Web システムではほとんど使用されず、時刻を保存するのに int を使用します。挿入する場合、この方法の方が計算に便利であるため、UNIX タイムスタンプが挿入されます。フロントエンド ビジネスで日付型関数を使用して、UNIX タイムスタンプを人々が認識できる時刻に変換します。

実際の状況に応じて上記の型を選択できます

データベース管理で閲覧しやすくするために、日時型を使用して時刻を保存する人もいます。

複合型

92.png


ENUM 型ではコレクションから 1 つの値のみを取得できますが、SET 型ではコレクションから任意の数の値を取得できます。

1.ENUM 型

ENUM 型では、セット内で 1 つの値のみを取得できます。これは、単一のオプションに似ています。人間の性別など、相互に排他的なデータを扱う場合に理解しやすくなります。 ENUM タイプのフィールドは、コレクションから値を取得することも、null 値を使用することもできます。他の入力では、MySQL によって空の文字列がフィールドに挿入されます。さらに、挿入された値の大文字と小文字がコレクション内の値の大文字と小文字が一致しない場合、MySQL は挿入された値の大文字と小文字を自動的に使用して、コレクションの大文字と小文字が一致する値に変換します。

ENUM タイプはシステム内部に数値として保存でき、1 から始まる数値でインデックスが付けられます。 ENUM タイプには最大 65536 個の要素を含めることができ、そのうちの 1 つはエラー情報を保存するために MySQL によって予約されており、このエラー値はインデックス 0 または空の文字列で表されます。

MySQL は、ENUM 型コレクションに表示される値を正当な入力であると見なし、その他の入力は失敗します。これは、空の文字列または対応する数値インデックス 0 を含む行を検索することで、エラーのあるレコードの場所を簡単に見つけることができることを示しています。

2.SET タイプ SET タイプは ENUM タイプに似ていますが、同じではありません。 SET タイプは、事前定義されたコレクションから任意の数の値を取得できます。また、ENUM タイプと同様に、SET タイプのフィールドに事前定義されていない値を挿入しようとすると、MySQL は空の文字列を挿入します。正当な要素と違法な要素の両方を含むレコードを挿入すると、MySQL は正当な要素を保持し、違法な要素を削除します。

SET タイプには最大 64 個の要素を含めることができます。 SET 要素では、値は、対応する要素を表す「ビット」の離散シーケンスとして格納されます。ビットは、要素の順序付けられたコレクションを作成するためのシンプルかつ効率的な方法です。
また、重複した要素も削除されるため、SET 型に 2 つの同一の要素を含めることはできません。
SET タイプのフィールドから不正なレコードを見つけるには、空の文字列またはバイナリ値 0 を含む行を探すだけです。

型の使用法


非常に多くの型を学習しました。テーブルステートメントを作成するときは、対応する型を使用するだけです。

例は次のとおりです:

CREATE TABLE IF NOT EXISTS デモ (
id int(11) NOT NULL,
username varchar(50) NOT NULL,
password char(32) NOT NULL,
content longtext NOT NULL,
createtime datetime NOT NULL,
sex tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

フィールドのその他の属性設定


  • UNSIGNED (符号なし) 主に整数と浮動小数点に使用されます型の場合は、符号なしを使用します。つまり、前に - (マイナス記号) がありません。
    保存桁数が長くなります。 tinyint integer の値の範囲は -128 ~ 127 です。 unsigned を使用した後は、0 ~ 255 の長さを保存できます。

作成するときは、整数または浮動小数点フィールドのステートメントに従います。

unsigned

  • ZEROFILL (0 パディング) 0 (スペースではない) を使用して出力値を補うことができます。この修飾子を使用して、MySQL データベースに負の値が格納されないようにします。

作成時に以下を追加します:

zerofill

  • default MySQL では関数または式の値を挿入できないため、デフォルト属性により定数値が割り当てられます。 。さらに、このプロパティは BLOB 列または TEXT 列では使用できません。この列に NULL 属性が指定されている場合、デフォルト値が指定されていない場合、デフォルト値は NULL になります。それ以外の場合、デフォルト値はフィールドのデータ型によって異なります。

作成するときは、整数または浮動小数点フィールドのステートメントに従います:

default 'value'

  • not null 列が not null として定義されている場合、その列に null 値を挿入することはできません。必要な値がすべてクエリに渡されたことを基本的に検証できるため、重要な状況では常に not null 属性を使用することをお勧めします。

作成時は、整数または浮動小数点フィールドのステートメントに従います:

  • not null

null 列に null 属性を指定すると、行内の他の列に関係なく、その列は空のままにすることができます。すでに埋まっています。 null は正確には「なし」を意味し、空の文字列や 0 ではないことに注意してください。

作成時に整数または浮動小数点フィールドのステートメントの後に not null を宣言しないでください。


文字セット

文字セットとは


中国語、日本語、英語、ギリシャ語をよりよく認識するため。一般的に使用される記号はエンコードされており、このエンコードが文字セットです。

文字セットはテキストの保存方法を決定します。

文字セットはコンピューターの人間の言語に相当します。

例:

私は英語を話すので、保存するときは英語のテキストを使用して保存する必要があります。
中国語で話している場合、それを英語の文字で保存します。そうなると、人々はそれを読むことも理解することもできず、いわゆる意味不明なものになります。

文字セットが多すぎて、数十、数百もあるからです。したがって、文字セットについて、あるいは文字セットが人間に見える文字にコンパイルされる方法についてさえ、あまり知る必要はありません。

文字セットに関する重要な知識


知っておくべきことは:

  • 一般的に使用される文字セット

  • データベースで使用する文字セットは何ですか?

英語の文字セット:

93.png


ASCII

ASCII コードは、指定された 7 ビットまたは 8 ビットの 2 進数の組み合わせを使用して、128 または 256 個の可能な文字を表します。標準 ASCII コード (基本 ASCII コードとも呼ばれます) は、7 ビットの 2 進数を使用して、すべての大文字と小文字、0 ~ 9 の数字、句読点、およびアメリカ英語で使用される特殊な制御文字を表します。
そのうち:
0~31 と 127 (合計 33) は、制御文字または通信固有の文字 (残りは表示可能な文字) であり、制御文字: LF (改行)、CR (キャリッジ リターン)、FF (ページ送り)、DEL(削除)、BS(バックスペース)、BEL(リング)など、通信特殊文字:SOH(テキストの先頭)、EOT(テキストの終わり)、ACK(確認)など。 8、9、10、13 はそれぞれバックスペース、タブ、ラインフィード、キャリッジリターン文字に変換されます。特定のグラフィック表示はありませんが、アプリケーションに応じてテキスト表示に異なる効果をもたらします。
32~126(計95)は文字(32はスペース)、そのうち48~57は0~9までの10個のアラビア数字です。
65〜90は26個の大文字の英字、97〜122は26個の小文字の英字、残りは句読点や算術記号などです。

GBK

GBK は GB 2312 エンコードと下位互換性があります。これは、中華人民共和国によって定義された漢字のコンピュータ エンコード仕様です。以前のバージョンは GB2312 です。

Unicode

Unicode (Unicode、Universal Code、Unicode) Unicode は、国際機関によって開発された、世界中のすべてのテキストと記号に対応できる文字コード化スキームです。クロス言語およびクロスプラットフォームのテキスト変換および処理の要件を満たすため。

UTF-8

は、Unicodeの可変長文字エンコーディングであり、ユニバーサルコードでもあります。 UNICODE は ASCII の 2 倍のスペースを占有し、上位バイトの 0 は ASCII には役に立たないためです。この問題を解決するために、Universal Transformation Format、つまりUTF(Universal Transformation Format)と呼ばれるいくつかの中間形式の文字セットが登場しました

実際の作業で使用される文字コード

。中国語 セットは utf-8 と GBK に分かれています。

実際に使用したものは以下の通りです:

94.png

(図 1) の特性を観察すると、MySQL 文字セットが 3 つの部分で構成されていることがわかります:
1. 文字セット
2. 言語
3. 型

最後のビンはバイナリ文字セットを参照します。次の ci は、保存および並べ替えの際に文字の大文字と小文字を区別しない性質を指します。

注:
mysql は、utf-8 を書き込むときに utf8 を書き込みます。中央の水平線は追加しないでください。

95.png


テーブルエンジン

MySQL のパワーは、テーブルの特性に基づいてさまざまなストレージ エンジンを使用して、最高のパフォーマンスを実現できます。

十分な知識があり、一定の実務経験がある場合。 Alibaba と NetEase がオープンソース化した MySQL エンジンを独自のサーバーで使用することもできます。

テーブルを作成するためのステートメントについては、次のセクション「データベース構造定義ステートメント」で学習できます。 mysql がテーブルを作成するときに、対応するエンジンを指定できます。

mysql コマンドで使用します:

show Engines;

現在のサーバーでサポートされているすべてのエンジンを表示できます。

一般的に使用されるエンジンをいくつか紹介し、あまり使用されないエンジンについて学びます。今後、概念を理解していないエンジンが実際の作業で使用されることは避けてください。

96.png

MyISAM

は、トランザクション、テーブルロック(テーブルレベルのロック、ロックするとテーブル全体がロックされます)をサポートせず、フルテキストインデックスをサポートし、動作速度が高速です。読書量が多いビジネスでよく使用されます。

  • myisam ストレージ エンジン テーブルは、myd と myi で構成されます。 .myd はデータ ファイルの保存に使用され、.myi はインデックス ファイルの保存に使用されます。

  • myisam ストレージ エンジン テーブルの場合、mysql データベースはインデックス ファイルのみをキャッシュし、データ ファイルのキャッシュはオペレーティング システム自体によって完了します。

InnoDB

  • は、主にオンライン トランザクション処理 (OLTP) アプリケーションのトランザクションをサポートします。

  • 行ロック設計は外部キーをサポートしています。つまり、読み取り操作はデフォルトではロックされません。

InnoDB は、大量のデータを処理するときに最大のパフォーマンスが得られるように設計されています。

注:
行ロック: 書き込みおよび更新操作中にこの行をロックして、他のユーザーが操作できないようにします。
テーブルロック: 書き込みおよび更新操作中に、他の人がテーブルを操作できないようにテーブルをロックします。
トランザクション: データ操作の 1 つが失敗した場合に、複数のデータを同時に操作します。操作前にロールバックできます。銀行、電子商取引、金融、その他のシステムで一般的に使用されます。



インデックス

インデックスは、はっきり言って、私たちの本の最新の目次です。

新華辞典を使用して漢字「张」を検索する場合、目次を使用せずに、新華辞典の最初のページから最後のページを見つける必要があり、2 時間かかる場合があります。辞書が分厚くなればなるほど、時間がかかります。ここで、ディレクトリを使用して漢字「Zhang」を検索します。Zhang の最初の文字は z であり、z で始まる漢字は 900 ページ以上あります。この手がかりがあれば、1 分しかかかりません。漢字の検索 これは、性別の重要性を示しています。

インデックスは、列内の特定の値を持つ行をすばやく検索するために使用されます。

インデックスを使用しない場合、MySQL は最初のレコードから開始して、関連する行が見つかるまでテーブル全体を読み取る必要があります。テーブルが大きいほど時間がかかります。テーブル内のクエリ対象のカラムにインデックスがある場合、MySQL はすべてのデータを調べることなく、データ ファイルの中央を検索する段階にすぐに到達できます。

もちろん、インデックスの数が多すぎると、修正速度が遅くなります。変更されたデータを書き込むときは、インデックスも変更する必要があるためです。

MySQL インデックス タイプ

97.png

次のセクション
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <?php echo "Hello World!!!"; ?> </body> </html>
コースウェア