Mysqlストレージエンジン
ストレージエンジンは、データベースの下部にあるテーブルのストレージ方法です。すべてのストレージエンジンは、特定のニーズに応じて必要な機能を実装します(たとえば、燃料を大量に消費し、高速で強力な自動車エンジンなど)。すべての選択は運転の効果につながります)
プレゼンテーション層はユーザーに面し、ロジック層はマシンに面します。
データベースの最下層はストレージをファイルシステムに依存しており、すべてのデータベースレコードはファイルに保存されます
mysqlに付属するエンジンのシステムビュー
- InnoDBはmysqlのデフォルトエンジンです
- トランザクション:トランザクションをサポートするかどうか
- XA:分散トランザクションをサポートするかどうか
- セーブポイント:トランザクションのロールバックポイントをサポートするかどうか
3つの一般的なエンジン
MyISAMエンジン
-トランザクションをサポートしていません
MyISAMは3つのファイルを使用してテーブルを整理します
- * .frmテーブル定義、テーブルの構造を説明するファイル
- * .MYDは、テーブルのデータファイルであるテーブルのデータレコードデータ情報ファイルを保存します。
- * .MYI索引情報ファイルは、表データ・ファイル内の任意の索引のデータ・ツリーです。
- * .optは、データベースオプション、データベース文字セット設定を記録します
利点:圧縮のサポート、スペースの節約、読み取り専用テーブルへの変換、取得効率の向上
欠点:トランザクションをサポートしない
InnoDBエンジン-
利点:トランザクション、行レベルのロック、外部キーなどをサポートします。InnoDBエンジンは最高のデータセキュリティを備えています
テーブル構造は* .frmファイルに格納されます。
データとインデックスはテーブルスペースなどのテーブルスペースに格納されます(論理概念、実際にはファイルに格納されます)。これらは圧縮できず、読み取り専用テーブルに変換できません。
-
共有表スペース:特定のデータベースのすべての表データ、索引ファイルはすべて1つのファイルに配置され、デフォルトのファイル名はibdata1です。
-
独立した表スペース:各表は独立したファイルとして生成および保管されます。各表には、.frm表記述ファイルと.ibdファイルがあります。
その中で、このファイルには単一のテーブルのデータコンテンツとインデックスコンテンツが含まれています。デフォルトでは、その保存場所はテーブルの場所にもあります。show variables like "innodb_file_per_table"; ON代表独立表空间管理,OFF代表共享表空间管理
InnoDBエンジンは、データベースのクラッシュ後に自動回復メカニズムを提供します
。InnoDBエンジンは、カスケード削除とカスケード更新をサポートします(1つのテーブルを削除し、カスケードすると別のテーブルが削除されます)
MEMORYエンジン
- 利点:データがメモリに保存されるため、クエリ速度が最も速くなります
- 短所:トランザクションをサポートしていません。停電によりデータが失われます
データベーステーブルの構造
テーブル構成
- 列:フィールド
- 行:レコード/データ
構造はフィールドを参照し、レコードはフィールドで定義されたタイプに従って生成されます
MySQLデータ型
データ型は、特定のフィールドに含まれるデータのルールを指定するために使用されます。フィールドに割り当てられた幅や、値を文字、数字、日付、および値にすることができるかどうかなど、データがフィールドに格納される方法を決定します。時間など
- 文字列型(CHAR(0-255固定長)、VARCHAR(0-255可変長)
- 数値型(INT(整数型)、FLOAT(浮動小数点))
- 日付と時刻のタイプ(DATE(年、月、日)、TIME(時、分、秒))
MySQL制約タイプ
制約は一種の制限であり、テーブルの行または列のデータを制限することにより、テーブル内のデータの整合性と一意性を保証します。
- 主キー制約(主キー):一意性制約+空でない制約の組み合わせ、複数のフィールドの組み合わせを設定できます(非推奨)。テーブルに含めることができる主キーは1つだけです。
- 役割:レコードの一意の識別子を決定する
- 外部キー制約(外部キー):外部キーは、主キーまたは別のテーブルへの一意の参照です。つまり、外部キーの値は、参照されるフィールドの値である必要があります。外部キーとして設定されたテーブルは、子と呼ばれます。テーブル、および参照されるテーブルは親テーブルと呼ばれ、従属と従属の間に関係があります
- 役割:データの一貫性と合法性を確保し、いくつかのカスケード操作を実現する
- 一意制約(一意):フィールドの下に挿入されたレコードを繰り返すことはできませんが、nullを繰り返すことができ、複数のフィールドの組み合わせを設定できます
- null以外の制約(null以外):フィールドの下のレコードを空にすることはできません
- デフォルトの制約(デフォルト):レコードのデフォルト値を挿入します(値が指定されていない場合)
主キーの制約
1.主キー制約を追加します
id int primary key;
#列级字段会面加上primary key
primary key(字段)
#表级主键方式
2.主キーの分類
主キーのフィールド数に応じて分割:
- 単一の主キー:単一のフィールド(推奨)
- 複合主キー:複数のフィールドの組み合わせ(3つのパラダイムに反して、推奨されません)
主キーの性質に応じて分割:
- 自然主キー:主キーの値は、ビジネスとは関係のない自然数であることが望ましい(推奨)
- ビジネス主キー:主キーの値はビジネスシステム(ID番号、カード番号など)にリンクされています。主キーフィールドのビジネスが変更されると、テーブル全体が変更され、その変更により発生する可能性があるため、お勧めしません。同じである主キー値
3.主キーの自動インクリメント
自然主キーは自然数であるため、手動メンテナンスなしで自己インクリメントを実現できます。
id int primary key auto_increment;
#字段会面加auto_increment
外部キー制約
外部キー制約として設定されたフィールドの値は、気軽に書き込むことはできません。参照される別のテーブルのフィールド値のみにすることができます。
1.外部キー値はnullにすることができます
2.外部キーフィールドは他のテーブルフィールドを参照し、参照されるフィールドは主キー制約または一意の制約(通常は主キー制約)にすることができ
ます3.外部キー制約sql
foreign key(字段) references 表(字段)
#中文标注的都是可以改变的
Mysqlトランザクション
- トランザクションは完全なビジネスロジックユニットであり、分割することはできません。つまり、複数のSQLステートメントの実行は成功または失敗し、1つは成功し、もう1つは失敗します。
- DMLステートメントのみがトランザクションとサポートに関連しています(挿入削除更新)
- 役割:データの整合性とセキュリティを確保する
- DMLステートメントのトランザクションメカニズムは必要ありません
取引原則
1.トランザクションを開始します
。2。実行されたステートメントは、ハードディスクファイルデータを変更せずに、最初に記録操作(キャッシュ)に保存されます。3
。トランザクションをコミットするか、トランザクションをロールバックできます(コミットしてロールバックすると、トランザクションが終了します。クリアします。記録操作)、送信sqlステートメントを1回実行した後、実際のハードディスク上のデータを変更します
送信ステートメント:コミット(SQLのデフォルトのセミコロンの終わりはコミットです)
ロールバックステートメント:ロールバック
取引の特徴
- Atomicity:最小の作業単位であり、細分化することはできません
- 一貫性:複数のDMLステートメントの実行が成功または失敗する
- 分離:トランザクションAとトランザクションBの間に分離があります
- 永続性:データは、トランザクションが終了する前にハードディスクに永続化されます
トランザクションの分離レベル(理論的には4つのレベルに分割されます)
レベル1:コミットされていない読み取り、相手のトランザクションがコミットされていない場合は読み取ることができます
- 問題があります:ダーティデータ、データレコードは送信されないため不安定です
レベル2:読み取りが送信されました。相手のトランザクションが送信された後に読み取ることができます
- ダーティデータを解決しました
- 問題があります。相手が送信するたびに異なるデータを読み取るため、繰り返し読み取ることができません。
3番目のレベル:繰り返し可能な読み取り、mysqlのデフォルトレベル
- 解決された繰り返し不可能な読み取り
- 問題があります:読み取られたデータが正しくない可能性があります
第4レベル:トランザクションキューイング
- すべての問題を解決しました
- 問題があります:効率が低く、トランザクションをキューに入れる必要があります
インデックス
索引は本のカタログに似ており、対応するリソースはカタログからすばやく見つけることができます。
1.インデックスを追加するタイミング
インデックスにはメンテナンスコストがかかります。データを変更した後、メンテナンスのためにインデックスを並べ替える必要があります。
- 膨大な量のデータ
- このフィールドでのDML操作が少ない
- このフィールドは、where句によく表示されます
主キーと一意の制約により、インデックスが自動的に追加されます
2.インデックスを作成および削除します
create index 索引名 on 表名(字段名)
drop index 索引名 on 表名
#通过expain sql语句查看执行计划的type和rous变化
データベース設計の3つのパラダイム
3つのパラダイムに従って設計されたテーブルには、データの冗長性がありません。
最初のパラダイム:どのテーブルにも主キーが必要であり、フィールドを分割することはできません
.2番目のパラダイム:最初のパラダイムに基づいて、すべての非主キーフィールドは完全に主キーに依存し、部分的に依存することはできません(フィールドの組み合わせは設定できません)
。張テーブル、2つの外部キーを持つリレーショナルテーブル
3番目のパラダイム:2番目のパラダイムに基づいて、すべての非主キーフィールドは主キーに直接依存し、
一時的に依存することはできません。2つのテーブル、複数のテーブルと外部キー
実際には、冗長性を実行速度と交換することができます。テーブルリンクが多いほど、実行速度が低下します。