Mysql InnoDB engine-4。テーブル(2)

前の記事に進みます。引き続き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パーティションが個別の値であることを除けば、My​​sql5.5はLIST COLUMNSパーティションをサポートし始めました。
  • HASHパーティション:ユーザー定義式の戻り値に応じてパーティション化し、戻り値を複素数にすることはできません。
  • KEYパーティション:Mysqlデータベースが提供するハッシュ関数に応じたパーティション。

作成するパーティションに関係なく、テーブルに主キーまたは一意のインデックスがある場合、各パーティションに対応する列も主キーまたは一意のインデックスである必要があります。

 

おすすめ

転載: www.cnblogs.com/wangb0402/p/12731740.html