前の記事に進みます。引き続きInnoDBテーブルの知識について学習します。この章の主な内容:InnoDBテーブルの制約、ビュー、パーティションテーブル。
拘束
まず、制約とインデックスの違いを理解し、ユーザーが一意のインデックスを作成します。つまり、ユーザーが一意の制約を作成します。ただし、制約とインデックスの概念は異なります。制約はデータの整合性を確保するために使用されるより論理的な概念であり、インデックスは論理的な概念と物理的なストレージの両方を持つデータ構造です。
データの整合性
InnoDBストレージエンジンテーブルでは、次の方法でドメインの整合性を保証できます。
- 適切なデータ型を選択して、データ値が特定の条件を満たすようにします
- 外部キー(外部キー)制約
- 書き込みトリガー(SQLの実行前後に実行される特定の動作、個人的にはSpringのAOPアスペクトのプログラミングとして理解されています)
- また、必須のドメイン整合性の側面として、DEFAULT制約の使用を検討することもできます。
InnoDBの場合、提供される集中型の制約は次のとおりです。
- 主キー
- 一意のキー
- 外部キー
- デフォルト
- NULLではない
間違ったデータの制約
特定のデフォルト値の下で、mysqlは不正または不正なデータの挿入または更新を許可します。たとえば、NOT NULL制約の下でNULL値を渡すと、MysqlはNULLを0に変換して挿入します。たとえば、「2020-02-30」を挿入して時間を挿入すると、データベースは日付が正当かどうかを検証しません。したがって、データベース自体はデータの正確性を検証しません。sql_modeを設定することにより、入力パラメーターを厳密に調べることができます。SQLは次のとおりです。
SET sql_mode = ' STRICT_TRANS_TABLES '
ENUMおよびSET制約
MySQLデータは従来のチェック制約をサポートしていませんが、需要のこの部分はENUMおよびSETタイプによって解決できます。特定の使用法については、https://blog.csdn.net/mlh110/article/details/62238278を参照して ください
トリガーと制約
より複雑な制約を実装する場合、ENUMとSETは少し弱いので、制約にはトリガーを使用することをお勧めします。
トリガー:役割は、INSERT、DELETE、およびUPDATEコマンドを実行する前または後に、SQLコマンドまたはストアドプロシージャを自動的に呼び出すことです。
トリガーを作成します。
CREATE [ 定義者= {ユーザー| current_user} ] 前にTRIGGER trigger_name | 挿入 後| 削除 | 更新 に TABLE_NAME のための各行trigger_stmt
テーブルには最大6つのトリガーを作成できます。つまり、挿入、更新、削除のトリガーを前後に定義できます。現在のmysqlは、各行のトリガーのみをサポートしています。
外部キー制約
整合性を確保するための外部キー制約。InnoDBは、次のように定義された外部キー制約をサポートします。
[ CONSTRAINT [symbol ] ] FOREIGN KEY [ index_name ] (table_col_name、......) REFERENCES tab_name(index_col_name、......) [ ON DELETE reference_option ] [ ON UPDATE reference_option ] reference_option: RESTRICT | カスケード | SET NULL | 何もしない
一般的に、参照されるテーブルは親テーブルと呼ばれ、参照されるテーブルは子テーブルになります。外部キーの定義中のON DELETEおよびON UPDATEは、親テーブルで関連する操作を実行するときに子テーブルで実行される操作を示します。子テーブルで定義できる操作は次のとおりです。
- CASCADE:親テーブルとしての操作の削除と更新
- SET NULL:サブテーブルに対応するデータがNULLに更新されます
- アクションなし:子テーブルに一致するレコードがある場合、親テーブルに対応する候補キーに対する更新/削除操作は許可されません
- RESTRICT:そのようなことが許可されていないことを示し、エラーをスローします(NO ACTIONと同様)。
見る
Mysqlデータベースでは、ビューは名前付きの仮想テーブルであり、SQLクエリステートメント定義があり、テーブルとして使用できますが、物理メモリを占有しません。Mysqlはマテリアライズドビューをサポートしていません。
パーティションテーブル
パーティショニングはエンジンレベルでは行われないため、パーティショニングを持つのはInnoDBだけではありません。Mysqlのデータベースパーティションは水平分割をサポートし、Mysqlの分割はデータとインデックスを一緒に分割することです。グローバルパーティション分割はサポートされていません(データは各パーティションに格納され、インデックスはオブジェクト内にあります)。
パーティションのタイプ:
- RANGEパーティション:行データは基本的に列の値の特定の連続範囲に属し、パーティションに配置されます。Mysql5.5はRANGE COLUMNSパーティションのサポートを開始しました。
- LISTパーティション:RANGEパーティションと同様ですが、LISTパーティションが個別の値であることを除けば、Mysql5.5はLIST COLUMNSパーティションをサポートし始めました。
- HASHパーティション:ユーザー定義式の戻り値に応じてパーティション化し、戻り値を複素数にすることはできません。
- KEYパーティション:Mysqlデータベースが提供するハッシュ関数に応じたパーティション。
作成するパーティションに関係なく、テーブルに主キーまたは一意のインデックスがある場合、各パーティションに対応する列も主キーまたは一意のインデックスである必要があります。