整合性制約整合性制約の定義挿入されたデータの正確性と合法性を保証するために、データ型の制約に加えて、テーブル内のフィールドに他の制約を追加します。 整合性制約の分類エンティティの整合性: レコード間で重複があってはなりません。
ドメイン整合性: データベース テーブルのフィールドは、特定のデータ型または制約に準拠する必要があります。
参照整合性: あるテーブル内のフィールドの値は、別のテーブル内の値を参照する必要があります。
主キー制約
主キー制約を追加するには、次の 3 つの方法があります。 方法 1: テーブルの作成時に主キー制約を追加します。 テーブル学生を作成( sid int 主キー、 sname varchar(20)、 年齢 int )文字セット=utf8; -- 主キー制約を追加した後、同じ sid を挿入するとエラーが発生します。 学生(sid,sname,age)に値(1,'张三',22)を挿入します。 学生(sid,sname,age)に値(1,'李四',33)を挿入します。 方法 2: テーブルの作成時に主キー制約を追加しますが、追加方法が異なります。 「主キーを追加するこの方法のみが複合主キーを追加できます」 テーブル学生を作成( sid int、 sname varchar(20)、 年齢 int、 主キー(sid) )文字セット=utf8; 方法 3: テーブルを作成した後、主キー制約を追加します。 テーブル学生を作成( sid int、 sname varchar(20)、 年齢 int )文字セット=utf8; テーブルstudentを変更し、主キー(sid)を追加します。 -- 制約は制約が追加されることを意味します。 -- pk_sid は制約の名前です。 単一の主キーと複合主キーの違い「単一の主キー」 テーブル内のフィールドを主キーとして設定し、このフィールドを使用してレコードを一意に識別します。 sid が一意であり空でない限り、各行は一意のレコードになります。 主キー(sid) sid sname 年齢 1 張三18 2 張三18 「共同主キー」 テーブル内の2つのフィールド(または複数のフィールド)を共同主キーとして設定し、これらの2つのフィールド(または複数のフィールド)を使用して、 レコードを一意に識別します。 これら 2 つのフィールドは、同時に繰り返されない限り、別々に繰り返すことができます。 主キー (sid、classid) sid クラスid sname 年齢 1 2 張三18 1 3 張三18 2 4 リチウムSi20 3 4 王武 30 -- 次の 2 つのレコードには同じフィールドがあるため、重複レコードとなり、挿入時にエラーが発生します。 5 5 李創25 5 5 王二24 主キーフィールドを選択するための原則
特別な注意: テーブル作成ステートメントのフィールドに主キー制限のみがあり、主キーauto_incrementを使用しない場合 ただし、上で述べたように、主キー フィールドは通常は変更されないため、積極的に値を指定しないでください。主キー フィールドには、システムによって既定値が割り当てられます。主キーの自動増分について学習すると、これが理解できるようになります。 覚えておいてください: 主キーと auto_increament は一緒に使用するのが最適です。 例えば: 主キー制約の削除テーブル student を変更し、主キーを削除します。 主キーの自動増分主キー自動増分の意味と特徴名前が示すように、これは主キーが自動的に値を追加するのに役立つ制約です。上で述べたように、主キー フィールドには変更を加えないことが最善です。もちろん、これには、主キー フィールドに値を挿入するときに主キーを手動で追加しないことも含まれます。代わりに、システムが主キー フィールドに値を自動的に割り当てるようにします。主キーの自動インクリメントには、次の 2 つの特性があります。
2 番目の機能の説明: 一意制約を追加するには、次の 2 つの方法があります。 方法 1: テーブルを作成するときに、主キーと主キーの自動増分を同時に追加します。 テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20)、 年齢 int、 idカードvarchar(18) )文字セット=utf8; -- データを挿入するときは、主キーと auto_increment を一緒に使用します。 -- 主キーフィールド sid に値を割り当てる必要はありません。 insert into student(sname,age) values ("张三",22),("李四",25); 方法 2: テーブルを作成した後、フィールドに「主キーと主キーの自動増分」を同時に追加します。 テーブル学生を作成( sid int、 sname varchar(20)、 年齢 int、 idカードvarchar(18) )文字セット=utf8; -- 次の 2 つの方法では、フィールドに「主キーと主キーの自動増分」を同時に追加できます。 テーブル student を変更し、 sid int 主キー auto_increment を変更します。 テーブル student を変更し、sid sid int 主キー auto_increment を変更します。 主キーの自動増分を削除する テーブル student を変更し、sid int 主キーを変更します。 一意制約ユニーク制約とは何を意味しますか?テーブルには主キーが 1 つしか存在できないためです。しかし、ID カード フィールドなどの一部のフィールドは一意である必要があります。それらを主キーとして設定することはできません (ID カード フィールドは意味のあるフィールドです)。では、それらの一意性をどのように保証すればよいでしょうか?これは次に説明する唯一の制約です。注: テーブルには複数の一意制約を設定できます。 一意制約を追加するには、次の 3 つの方法があります。 方法 1: テーブルの作成時に一意制約を追加します。 テーブル学生を作成( sid int 主キー キー auto_increment, sname varchar(20)、 年齢 int、 idcard varchar(18) ユニーク )文字セット=utf8; 方法 2: テーブルの作成時に、異なる方法で一意制約を追加します。 「主キーを追加するこの方法のみが複合主キーを追加できます」 学生テーブルを作成 ( sid int 主キー auto_increment, sname varchar(20)、 年齢 int、 idcard varchar(18)、 ユニーク(IDカード) )文字セット=utf8; 方法 3: テーブルを作成した後、一意制約を追加します。 学生テーブルを作成 ( sid int 主キー auto_increment, sname varchar(20)、 年齢 int、 idカードvarchar(18) )文字セット=utf8; テーブルstudentを変更し、unique(idcard)を追加します。 -- 一意制約が設定されたフィールドの場合、同じ値が挿入されるとエラーが報告されます。 insert into student(sname,age,idcard) values ("李四",18,"123456"); insert into student(sname,age,idcard) values ("王五",22,"123456"); ユニーク制約の削除一意制約を削除するには、使用するステートメントが若干異なります。 テーブルを変更して学生のキー ID カードをドロップします。 非NULL制約を追加する非NULL制約の追加非 null 制約とは、フィールドに非 null 制約を設定した後、フィールドに null 値を挿入するとエラーが報告されることを意味します。非 null 制約を追加するには、次の 2 つの方法があります。 方法 1: テーブルを作成するときに、フィールドに NOT NULL 制約を追加します。 テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20) が null ではない、 年齢 int、 idカードvarchar(18) )文字セット=utf8; 方法 2: テーブルを作成した後、フィールドに NOT NULL 制約を追加します。 テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20)、 年齢 int、 idカードvarchar(18) )文字セット=utf8; -- 追加方法は2つあります。 alter table student sname varchar(20) が null でないを変更します。 alter table student sname sname varchar(20) が null ではありません。 フィールドに非NULL制約を追加すると、次の特性を持つようになります。
「こうした細かい点に気づかないこともあるので、個別に説明します。」 1: フィールドに非 null 制約が設定されると、null 値を挿入できなくなります。 -- 次の挿入はエラーになります。 学生(sname,age)に値(null,22)を挿入します。 2: フィールドに非 null 制約が設定されると、null 値を挿入できなくなるだけでなく、値を挿入することもできなくなります。 -- 次の挿入でもエラーが報告されます。 学生(年齢、IDカード)に値(33、"123456789")を挿入します。 以下にいくつか例を挙げます。 デフォルト値制約を追加する(デフォルト)フィールドにデフォルト値が設定されている場合、フィールドに値を指定しないと、このデフォルト値が表示されます。 デフォルト値制約の追加方法 1: テーブルを作成するときに、フィールドにデフォルト値を追加します。 テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20)、 年齢 int デフォルト 0, idカードvarchar(18) )文字セット=utf8; 方法 2: テーブルを作成した後、フィールドにデフォルト値を追加します。 テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20)、 年齢 int、 idカードvarchar(18) )文字セット=utf8; 「さまざまな点に特別な注意が必要です」 -- alter を使用してデフォルト値を追加するコードは少し特殊です。 テーブルstudentを変更し、年齢を変更し、デフォルトを0に設定します。 デフォルト値を削除する テーブル student を変更し、列 age を変更し、デフォルトを削除します。 参照整合性参照整合性とは何ですか?参照整合性とは、あるテーブル内のフィールドの値が別のテーブル内のフィールドの値を参照する必要があることを意味します。ここで関係するのは外部キーです: 外部キー。一般的に、このテーブルのこのフィールドは外部キーとして設定されます。参照テーブル内のそのフィールドの値は、そのテーブルの主キーとして設定する必要があります。 理解を深めるために、次の図を参照してください。 特記事項: 学生テーブルの cid は、クラス テーブルの cid を参照します。ここでフィールド名がまったく同じであることがわかります。ただし、実際には、2 つのフィールド名は異なっていてもかまいませんが、2 つのフィールドのデータ型は同じである必要があります。 参照整合性を構成する条件は次のとおりです。
外部キー制約の追加覚えておかなければならないことの 1 つは、現在のテーブルに外部キー制約を追加する前に、まず参照先のテーブルを用意しておく必要があるということです。そうしないと、誰を参照することになるのでしょうか。 外部キー制約を追加するには、次の 2 つの方法があります。 方法 1: テーブルを作成するときに、フィールドに外部キー制約を追加します。 テーブル教室を作成( cid int 主キー auto_increment, cname varchar(20) が null ではない )文字セット=utf8; テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20) が null ではない、 年齢ビット(1) cid int、 制約 fk_cid 外部キー(cid) は、classroom(cid) を参照します。 )文字セット=utf8; 方法 2: テーブルを作成した後、フィールドに外部キー制約を追加します。 テーブル教室を作成( cid int 主キー、 cname varchar(20) が null ではない )文字セット=utf8; テーブル学生を作成( sid int 主キー auto_increment, sname varchar(20) が null ではない、 年齢ビット(1) cid 整数 )文字セット=utf8; テーブル student を変更し、制約 fk_cid 外部キー (cid) を追加します。 参照教室(cid); 「注意: 制約の後にエイリアスが続き、fk_cid はエイリアスと同等です。」 要約するこれで、MySQL 整合性制約に関するこの記事は終了です。MySQL 整合性制約の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Harborを使用してプライベートDockerリポジトリを構築する方法
>>: さまざまなネットワーク画像形式におけるPNGの利点の詳細な説明
目次継承とプロトタイプチェーン継承されたプロパティ継承されたメソッドJavaScript でのプロト...
div を使用してマスクを作成したり、ポップアップ ウィンドウをシミュレートしたりします。ただし、I...
MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...
脆弱性の詳細VSFTP は、GPL に基づいてリリースされた Unix ライクなシステムで使用される...
MySQLマルチインスタンスとは簡単に言うと、MySQL マルチインスタンスとは、サーバー上で複数の...
一般的なページング方法: 1. エスカレーター方式エスカレーター方式では通常、前のページ/次のページ...
1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...
クローラー対策ポリシー ファイルを追加しました: vim /usr/www/server/nginx...
始める前にクラウドサーバーを持っています。私のはTencent Cloud Server (Cent...
純粋な HTML + CSS を使ってドラえもんの絵を描くなど、CSS 描画に関する記事をよく見かけ...
目次概要1. 関数デバウンス2. 機能スロットリング(スロットル)概要関数アンチシェイクと関数スロッ...
MySQL_8.0.2のオフラインインストール方法は参考までに。具体的な内容は以下のとおりです。次の...
インストール前の準備CUDA の主な目的はディープラーニングであり、現在主流のディープラーニングフレ...
シミュレーション環境を構築する:オペレーティングシステム: centos7メモリ: 1G 1.8.0...