第 3 章 テーブルの制約
データベースのテーブルを設計する際には、テーブル内で制限する必要があり、条件を満たさないデータはテーブルに挿入できません。これが「制約」です。
1. 空の属性
1、ヌル
MySQL の Null は次のように表されます: NULL NULLNULL。 _ 私たちが C/C++ を学習していたとき、空の属性 NULL は数値 0 を表していました。しかし、MySQL では、NULL は値を表しません。NULL は何も意味せず、0 を表さず、スペースも表しません。MySQL では、データが空の場合は操作に参加できないため、データができる限り空にならないようにしてください (これについては後で説明します)。
2. 空の制約
一部のデータが空であることは論理的に不可能です。たとえば、学校で生徒の情報をカウントしたい場合、生徒には対応するクラスが必要です。つまり、クラス列のデータを空にすることはできません。したがって、このデータ属性に特定の制約を設定できます。つまり、クラスを空にすることはできません。制約の存在により、MySQL 内のデータの合法性が大幅に向上します。
では、空の制約を設定するにはどうすればよいでしょうか?
テーブルを作成するときは、not null
対応する変数の後にテーブルを追加するだけです。
構文は次のとおりです。
变量名 数据类型 not null;
たとえば、T テーブルを作成します。このテーブルには 2 つの変数があり、1 つはid idです。i d、1 つはname name名前e。同時にnot null not\ null をnot o t null llという制約 。
テーブルが作成されたら、T テーブルの説明を見てみましょう。
次の図に示すように、id に対応する NULL 空属性列は NO、つまり変数を空にすることができないことがわかりました。
そこで、テーブルにデータを挿入します。
データを挿入するときに、id カラムが書き込まれていないと、MySQL がエラーを報告し、それによって一定の制約効果が得られることがわかりました。
2、デフォルト値
1、デフォルト
デフォルト値: 特定の種類のデータには特定の値が指定されていることが多く、最初に指定できます。実際のデータが必要な場合、ユーザーはデフォルト値を選択して使用できます。
デフォルト値の効果: データが挿入されるとき、フィールドには値が割り当てられず、デフォルト値が使用されます。
2. 文法
数据名 数据类型 default 默认值
T テーブルを作成します。このテーブルには、id、score、name の 3 つの変数があります。このうち、ID を空にすることはできず、スコアはデフォルトで 0 ポイントになります。
次に、このテーブルにデータを挿入します。
スコアを挿入しない場合、MySQL はデフォルトでデフォルト値 0 を挿入することがわかりました。
3. 注記(列の説明)
1つのコメント
C/C++ では、コメントを表現するために\\
使用されます。テーブルを作成するときに、プログラマが読みやすくするために、変数によってはコメントを追加する必要があります。その後、テーブルを作成するときに、コメントを使用してコメントを書くことができます。
2. 文法
数据名称 数据类型 comment '注释内容'
テーブルを作成した後、テーブルの説明を確認できます。
テーブルの作成時に追加されたコメントがテーブルにまったく表示されていないことがわかりました。
では、注釈を確認するにはどこに行けばよいのでしょうか?
次のステートメントを使用すると、テーブルを作成したステートメントを表示できます。
show create table 表的名称;
この時点では、以前に追加されたコメントが表示されますが、形式がめちゃくちゃになっています。このとき、;
のように書き換える\G
と、システムが印刷形式を調整してくれます。
以下の図に示すように:
上の図は、T テーブルを作成したときに作成したステートメントであり、メモの内容が明確にわかります。
4、ゼロフィル
1. ゼロフィルとは
ゼロフィルとは何かを説明する前に、次の図に示すような現象について触れておく必要があります。上の図は特定のテーブルの説明です。列
を見てみましょう。この列では、後ろに数字 11 があります。 Type
int、varchar の後には 20 という数字もあります。この数値 20 は、明らかに、前に指定した文字列の最大長です。
では、int の後の数字は何を意味するのでしょうか?
実はこの11は最大長でもあります。次に、zerofill は未使用の上位ビットを 0 で埋めることですが、値自体のサイズには影響しません。
2. 文法
数据名称 数据类型 zerofill
5、主キー
1、主キー
場合によっては、学生の学籍番号や個人の ID 番号など、一部のデータは 1 回だけ表示されます。学籍番号とID番号は人それぞれ異なります。したがって、主キーは 1 回だけ出現する変数を制約するために使用されます。
主キーによって制約された変数を繰り返したり、空にしたりすることはできません。
テーブルには主キーを 1 つだけ持つことができます。
2. 文法
数据名称 数据类型 primary key
たとえば、主キーによって変更された id 変数のみを使用するテーブル T を作成します。そしてテーブルにデータを挿入します。
このテーブルには既にデータ 1 があります。そこに別の 1 を挿入して、正常に挿入できるかどうかを確認してみましょう。
1 はすでに存在しているため、重複を避けるためにデータ 1 を再度挿入することはできないことがわかり、システムは保存を送信しました。
3. 主キーを変更する
変数が主キーを追加し忘れた場合は、テーブルの作成後に主キーを追加できます。構文は
次のとおりです。
alter table 表的名称 add primary key (变量名);
まず、主キーを変更せずに変数 T が 1 つだけ存在するテーブル T を作成します。
次に、主キーを追加して id 変数を変更します。
このテーブルの説明をもう一度見てみましょう。
主キーはすでにキー列に表示されています。
主キーを追加するだけでなく、変数の主キーを削除することもできます。
alter table 表的名称 drop primary key;
4. 複合主キー
テーブルを作成するとき、いくつかの変数を組み合わせて、主キーとして変数グループを形成できます。
構文は次のとおりです。
primary key(变量1,变量2,...)
T テーブルを作成します。このテーブルには 2 つの変数があり、1 つの変数は ID、もう 1 つの変数は名前です。ID + 名前の変数グループに主キーを追加します。
次に、このテーブルにデータを挿入します。
以下の図に示すように、
変数の 1 つが重複している場合でも挿入は可能ですが、変数グループ全体が重複している場合は挿入が失敗することがわかりました。
6. 自己成長
1、自動インクリメント
自己成長とは、その名の通り、自動的に成長することです。auto_increment を使用して変数を変更するときに、変数が割り当てられていない場合、MySQL は変数の最大値を見つけて、最大值+1
それを変数に割り当てます。
auto_increment は主キーと同じであり、各テーブルは自動インクリメント変数を 1 つだけ持つことができます。変数を自己増加させるには、それがインデックスである (キー列に値がある) ことが前提となります。それ以外の場合、自動インクリメント フィールドは整数である必要があります。
2. 文法
数据名称 数据类型 键的类型 auto_increment
次の図に示すように、テーブル T を作成します。このテーブル T には 2 つの変数があり、1 つは id で、もう 1 つは name です。このうち、id変数を主キーで変更し、さらにidに自己増加属性を追加しています。
次に、テーブルにデータを挿入します。
最初に ID が 10 のデータを挿入し、次に ID のないデータを挿入します。しかし、最終的に、mysql は最初のデータの ID に基づいて 2 番目のデータの ID 値を推測しました。
7. 固有のキー
1、ユニークな
多くの場合、テーブル内には一意性が必要なフィールドが多数あり、データを繰り返すことはできませんが、テーブル内に存在できる主キーは 1 つだけです。一意のキーを使用すると、テーブル内の複数のフィールドが一意性を必要とする問題を解決できます。
一意キーの本質は主キーの本質と似ています。一意キーは空であっても、複数が空であってもかまいません。空のフィールドは一意性について比較されません。
2. 文法
数据名 数据类型 unique
ここで、id 変数が主キーで修飾され、name 変数が一意のキーで修飾されたテーブルを作成します。
テーブルの説明は以下の通りで、キー値の列に2つのキー値の型が反映されていることが分かりました。
8. 外部キー
1、外部キー
外部キーは、メイン テーブルとスレーブ テーブル間の関係を定義するために使用されます。外部キー制約は主にスレーブ テーブルで定義され、マスター テーブルには主キー制約または一意制約が必要です。外部キーを定義する場合、外部キー列のデータはメインテーブルの主キー列に存在するか、NULL である必要があります。
2. 文法
foreign key (变量名) references 主表(变量名)
たとえば、次の図に示すテーブルを作成したいとします。(右側のクラス テーブルがマスター テーブル、学生テーブルがスレーブ テーブルです)
まずマスター テーブルを作成します: myclass
メイン テーブルの説明は次のとおりです。
次に、スレーブ テーブルを作成し、外部キー制約をスレーブ テーブルに追加します。
それでは、まずメインテーブルにデータを挿入しましょう。
次に、データをスレーブ テーブルに挿入します。
挿入した class_id がメインテーブルに存在しないデータである場合、mysql はエラーを報告することがわかりました。