MySQLデータベースのマルチテーブル操作

jacklove
リリース: 2018-06-11 23:15:24
オリジナル
3165 人が閲覧しました

1. 外部キー

1. 外部キーとは: 参照される列には、主キー制約または一意制約が必要です。外部キーは、2 つのテーブル内のデータ間の接続を確立および強化するために使用されます。


Student テーブルの gid は生徒のクラス ID であり、成績テーブルの主キー ID です。その後、gid をテーブル Student への外部キーとして使用できます。参照されるテーブル、つまりテーブル Grade がマスター テーブル、外部キーを参照するテーブル、つまり Student テーブルがスレーブ テーブルであり、2 つのテーブルはマスターとスレーブの関係にあります。 Student テーブルは GID を使用して成績テーブルの情報を接続することができ、これにより 2 つのテーブルのデータ間の接続が確立されます。

外部キー列は参照列に存在する値のみを挿入でき、参照列の参照値は削除できません。これにより、データの 参照整合性 が保証されます。

2. テーブルに外部キー制約を追加します

2 つのテーブルのデータを実際に接続したい場合は、テーブルに外部キー制約を追加する必要があります。テーブルに外部キー制約を追加するための構文形式は次のとおりです。 alter table テーブル名 add constraint FK_ID 外部キー (外部キー フィールド名) 参照 外部キー テーブル名 (主キー フィールド名)

追加テーブルへの外部キー 制約する場合、次のような注意が必要な点があります:

(1) 外部キーの確立に使用されるテーブルは InnoDB タイプである必要があり、一時テーブルであってはなりません。 MySQL では InnoDB タイプのテーブルのみが外部キーをサポートしているため、

(2) 外部キー名を定義するときに、制約 'FK_ID' や制約 'FK_ID' などの引用符を追加することはできませんが、どちらも間違っています。

メインテーブルのデータを削除するときは、スレーブテーブルのデータも削除する必要があります。そうしないと、大量の無意味なジャンクデータがパラメータ化されてしまいます。 Mysql は、外部キーを作成するときに on delete 句または on update 句を追加して、ガベージ データの生成を回避する方法をデータベースに指示できます。具体的な構文形式は次のとおりです。

Alter table テーブル名 addconstraint 外部キー (外部キー フィールド名) は、外部テーブル名 (主キー フィールド名) を参照します。 }]

[on update{cascade | set null |strict}]

ステートメント内の各パラメーターの具体的な説明は次の表のとおりです。

機能説明カスケード削除されたキー値との参照関係を含むすべてのレコードを削除nullを設定削除されたキー値との参照関係を含むすべてのレコードを変更し、 null 値に置き換えます (null ではないとマークされているフィールドには使用できません) アクションなしアクションなし制限メインテーブルの削除を拒否または、外部キー関連の列を変更します。 (これはデフォルト設定であり、on delete 句と on update 句が定義されていない場合の最も安全な設定です)

3. 外部キー制約の削除: テーブルテーブル名の変更 外部キーの削除


2. アソシエーションテーブルの操作

(1) 多対-one :

many

対1のテーブル関係では、外部キーはmany側で構築される必要があります。そうしないと、データの冗長性が発生します。 (2) 多対多: 生徒テーブルやコーススケジュールなど。通常、この関係を実現するには、中間テーブル (結合テーブルと呼ばれる) を定義する必要があります。このテーブルには、コース スケジュールと学生テーブルをそれぞれ参照する 2 つの外部キーがあります。多対多のリレーションシップでは、テーブルを接続する 2 つの外部キーは反復可能ですが、2 つの外部キー間の関係は反復できないため、2 つの外部キーはテーブルの外部キーと同じであることに注意してください。ユニオンの主キー。

(3) 1 対 1: まず、マスターとスレーブの関係を区別する必要があります。たとえば、人間はマスター テーブル、ID カードはマスター テーブルの存在を意味します。スレーブ テーブルと外部キーがスレーブ テーブルに確立されます。この方法で保存された情報は通常テーブルに配置されるため、この関係はデータベースでは一般的ではないことに注意してください。実際の開発では、1 対 1 の対応関係は次のような場面で適用できます。

Ø 多くの列を含むテーブルを分割します。

Ø セキュリティ上の理由からテーブルの一部を分離します。

Ø テーブルを削除することで簡単に削除できる一時データを保存します。

2. データの追加

上記のステートメントが正常に実行されると、2 つのテーブル間のデータが関連付けられます。ソフトウェア クラス 1 の学生をクエリする場合は、まずソフトウェア クラス 1 の ID をクエリし、次にこの ID に基づいて学生テーブル内の学生をクエリする必要があります。


3. データの削除: 成績表と生徒表の関係上、参照列の参照値は削除できません。したがって、ソフトウェア クラスを削除する場合は、必ず最初にクラス内のすべての生徒を削除してから、クラスを削除してください。

(1) ソフトウェア クラス 1 の生徒をすべて削除します

(2) 成績表で、ソフトウェア クラス 1 を削除します

ソフトウェア クラス 2 を直接削除すると、エラーが発生します:

必須 実際の状況では、「ソフトウェア クラス 1」を削除する場合、「ソフトウェア クラス 1 の学生」を削除する必要はないことに注意してください。学生テーブルの gid=1 を gid から null に変更できます。メインテーブルのカラムは削除されていないため、テーブルを参照することで削除できます。ただし、テーブルの作成時に gid フィールドに非 null 制約があるため、この例では学生のみを削除できます。

3. 接続クエリ: 2 つ以上のテーブルに同じ意味を持つフィールドがある場合、これらのフィールドを使用して、異なるテーブルに対して接続クエリを実行できます。

1. 相互接続: 返される結果は、接続されている 2 つのテーブルのすべてのデータ行のデカルト積です。つまり、クエリ条件を満たす最初のテーブルのデータ行の数にデータの数を乗算して返されます。クエリ条件を満たす 2 番目のテーブルの行数。構文形式は次のとおりです。

Select * from Table 1 クロス結合 Table 2;

からわかるように、実際の研究開発では、この要件はまれであり、代わりに特定の条件が使用されることに注意してください。目的に応じてデータをクエリします。

2. 内部接続: 単純接続または自然接続とも呼ばれます。比較演算子を使用して 2 つのテーブルのデータを比較し、結合条件に一致するデータ行をリストし、それらを結合して新しいレコードを作成します。構文形式は次のとおりです:

テーブル 1 からクエリ フィールドを選択 [内部] テーブル 1 でテーブル 2 を結合します。リレーショナル フィールド = テーブル 2。リレーショナル フィールド

where 条件ステートメントを使用して同じ機能を実現することもできます。

これら 2 つのメソッドのクエリ結果は同じですが、inner join は内部結合ステートメントであり、where は条件判定ステートメントであり、where の直後に他の条件を追加できますが、inner join ステートメントは追加できません。

#結合クエリ内で、関係する 2 つのテーブルが同じテーブルである場合、この種のクエリは自己結合クエリと呼ばれます。自己結合は、相互に接続されているテーブルが物理的には同じテーブルですが、論理的には 2 つのテーブルに分割されることを意味します。たとえば、Wang Hon の部門にどの従業員がいるかをクエリする場合、次のようになります。自己結合クエリを使用します。

3. 外部結合: キーワードの左側のテーブルを座標、右側の単語を右テーブルと呼びます

テーブル 1 からチェックするフィールドを選択します left|right [outer ] テーブル 2 を結合

テーブル 1 上。リレーショナル フィールド = テーブル 2。リレーショナル フィールド where 条件

(1) 左結合 (左結合): 結合条件を満たす左テーブルのすべてのレコードと右テーブルのレコードを返します。 。

左のテーブルのレコードが右のテーブルに存在しない場合、右のテーブルでは空として表示されます。

(2) 右結合: 右テーブルのすべてのレコードと、結合条件を満たす左テーブルのレコードを返します。

4. 複合条件結合クエリ

4. サブクエリ: 別のクエリ ステートメント内にネストされたクエリを指します。これは、select、select...into ステートメント、insert...into およびその他のステートメントにネストできます。クエリ ステートメントを実行するときは、最初にサブクエリ内のステートメントが実行され、次に返された結果が外側のクエリのフィルター条件として使用されます。通常、サブクエリでは、in、exists、any、および all 演算子を使用できます。

(1) With in Keyword サブクエリ: 内側のクエリ ステートメントは 1 つのデータ列のみを返し、このデータ列の値は外側のクエリ ステートメントによる比較演算に使用されます。

例: 年齢が20歳の従業員がいる部署をクエリします。

(2) キーワードが存在するサブクエリ: キーワードの後のパラメータは、テストとして機能し、戻り値が の場合にのみ True または False を返します。 True の場合、外側のクエリが実行されます。

次の例では、サブクエリの戻り結果が True であるため、外側のクエリ ステートメントが実行されます。つまり、すべての部門情報がクエリされます。なお、in キーワードよりもexists キーワードの方が効率が良いため、実際の開発では、特にデータ量が多い場合にはexists キーワードを使用することをお勧めします。

(3) 任意のキーワードを含むサブクエリ: any は、内部サブクエリのいずれか 1 つが存在する限り、サブクエリの戻り値リストを比較する式を作成できることを意味します。条件を比較し、結果を外部クエリ条件として返します。

(4) all キーワードを使用したサブクエリ: all キーワードを使用したサブクエリによって返される結果がすべての内部クエリ条件を同時に満たさなければならない点を除けば、any と似ています。

(5) 比較演算子を使用したサブクエリ

この記事では、MySQL データベースの複数テーブルの操作について説明します。さらに関連する内容については、PHP 中国語 Web サイトを参照してください。

関連する推奨事項:

$ セレクター - DOM を jquery オブジェクトにカプセル化する方法

ネイティブ JS コンポーネント開発 シンプルなカルーセル チャートのサンプル コード

css3 アニメーション ナビゲーション バー 3D

以上がMySQLデータベースのマルチテーブル操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!