MySQL外部キーの3つの関係例の詳細な説明

MySQL外部キーの3つの関係例の詳細な説明

この記事では、例を使用して、MySQL 外部キーの 3 つの関係について説明します。ご参考までに、詳細は以下の通りです。

外部キー制約により、2 つのテーブルは次の 3 種類の関係を形成します。

  • 多数対一
  • 多対多
  • 一対一

1対多または多対1

多数対一

テーブルを作成 押す(
  id int 主キー auto_increment,
  名前varchar(20)
);
テーブルブックを作成(
  id int 主キー auto_increment,
  名前varchar(20),
  press_id int が null ではない、
     制約 fk_book_press 外部キー(press_id) は press(id) を参照します。
  削除カスケード
  更新カスケード
);

# まず、関連するテーブルにレコードを挿入します insert into press(name) values
(『北京工業鉱山出版社』)
(『人民の音楽は聴くに適さない出版社』)
(「知的財産は出版社にとって無用だ」)
;
# 関連テーブルにレコードを挿入する insert into book(name,press_id) values
(『九陽の魔術』1)、
(『九陰マニュアル』2)、
(『九陰白骨爪』2)
(『独孤九軒』3)
(『ドラゴンを鎮めるための十の平手打ち』、2)
(『ひまわりコレクション』3)
;

クエリ結果:

mysql> 本から * を選択します。
+----+-----------------+----------+
| ID | 名前 | プレスID |
+----+-----------------+----------+
| 1 | 九陽魔法スキル | 1 |
| 2 | 九陰マニュアル | 2 |
| 3 | 九陰骨爪 | 2 |
| 4 | 獨孤九軒 | 3 |
| 5 | ドラゴンの十の平手打ち | 2 |
| 6 | ひまわりマニュアル | 3 |
+----+-----------------+----------+
セット内の行数 (0.00 秒)
mysql> pressから*を選択します。
+----+--------------------------------+
| ID | 名前 |
+----+--------------------------------+
| 1 | 北京工業鉱山プレス |
| 2 | ピープルズミュージック出版社 |
| 3 | 知的財産は役に立たない |
+----+--------------------------------+
セット内の行数 (0.00 秒)

多対多、3番目のテーブルを導入

多対多

# 関連テーブル author テーブルを作成します。前の book テーブルは多対 1 の関係で作成されています。create table author(
  id int 主キー auto_increment,
  名前varchar(20)
);
#このテーブルには、著者テーブルと書籍テーブルの関係が格納されます。2 つの関係を照会するには、このテーブルを照会するだけです。create table author2book(
  id int NULL以外 ユニーク auto_increment,
  author_id int が null ではない、
  book_id int が null ではない、
  制約 fk_author 外部キー(author_id) は author(id) を参照します。
  削除カスケード
  更新カスケードでは、
  制約 fk_book 外部キー(book_id) は book(id) を参照します。
  削除カスケード
  更新カスケードでは、
  主キー(著者ID、書籍ID)
);
# 4 人の著者を ID 順に挿入します。 insert into author(name) values('egon'),('alex'),('wusir'),('yuanhao');
# 各著者の代表作 egon: 九陽魔術、九陰書、九陰骨爪、独孤九軒、十掌龍鎮圧、ひまわりコレクション alex: 九陽魔術、ひまわりコレクション wusir: 独孤九軒、十掌龍鎮圧、ひまわりコレクション yuanhao: 九陽魔術 # 対応するデータを author2book テーブルに挿入します insert into author2book(author_id,book_id) values
(1,1)、
(1,2)
(1,3)
(1,4)
(1,5)
(1,6)
(2,1)
(2,6)
(3,4)
(3,5)、
(3,6)
(4,1)
;

# これで、author2book に対応する著者と書籍の関係を確認できます。mysql> select * from author2book;
+----+-----------+---------+
| id | 著者ID | 書籍ID |
+----+-----------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 1 | 4 |
| 5 | 1 | 5 |
| 6 | 1 | 6 |
| 7 | 2 | 1 |
| 8 | 2 | 6 |
| 9 | 3 | 4 |
| 10 | 3 | 5 |
| 11 | 3 | 6 |
| 12 | 4 | 1 |
+----+-----------+---------+
セット内の行数 (0.00 秒)

一対一の状況

一対一

#例: ユーザーは 1 つのブログのみを登録できます #2 つのテーブル: ユーザー テーブル (user) とブログ テーブル (blog)
# ユーザーテーブルを作成する create table user(
  id int 主キー auto_increment,
  名前varchar(20)
);
# ブログテーブルを作成する create table blog(
  id int 主キー auto_increment,
  url varchar(100)、
  user_id int ユニーク、
  制約 fk_user 外部キー(user_id) は user(id) を参照します。
  削除カスケード
  更新カスケード
);
# ユーザーテーブルにレコードを挿入する insert into user(name) values
(「アレックス」)、
(「ウシル」)、
(「エゴン」)、
(「シャオマ」)
;
#ブログテーブルにレコードを挿入する insert into blog(url,user_id) values
('http://www.cnblog/alex',1),
('http://www.cnblog/wusir',2),
('http://www.cnblog/egon',3)、
('http://www.cnblog/xiaoma',4)
;
# wusir のブログ アドレスを照会します。select url from blog where user_id=2;

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL外部キーの基本的な機能と使用方法の詳細な説明
  • MySQL データベースのデータ テーブルの最適化、外部キーの分析、3 つのパラダイムの使用
  • MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明
  • MySQL 外部キー制約の一般的な操作の例 [表示、追加、変更、削除]
  • MySQL が外部キーを作成できない理由と解決策
  • 外部キー制約を持つテーブルデータを削除する MySQL メソッドの紹介
  • MySQL テーブルを削除するときに外部キー制約を無視するシンプルな実装
  • MySQL が外部キーエラーを追加します: 1215 外部キー制約ソリューションを追加できません
  • MySQL で外部キーを使用してカスケード削除と更新を実装する方法
  • MySQL テーブル作成外部キー エラーの解決方法

<<:  Vueはカスタムツリーコンポーネントを再帰的に実装します

>>:  Linux 時間サブシステムの時間表現例の詳細な説明

推薦する

デザイン理論:テキスト表現とユーザビリティ

<br />テキストデザインでは、通常、テキストのレイアウト、つまりテキストをより美しく...

Dockerでのpython3.8イメージのインストールについて

Docker Hub公式サイト1. Pythonミラーを検索するdocker 検索 python 2...

Vue.js での VNode の使用

VNodeとはvue.js には VNode クラスがあり、これを使用してさまざまな種類の vnod...

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

WeChatアプレットでラッキーホイールゲームを実装する方法

ここでは主に、WeChat アプレットでラッキーホイール ゲームを開発する方法を紹介します。主に J...

Dockerfileを使用して独自のイメージを作成する方法

1. 空のディレクトリを作成する $ cd /home/xm6f/dev $ mkdir myapp...

Linuxでpyファイルを直接実行する方法

1. まずファイルを作成します(ファイルを配置するディレクトリにcdします) myTest.py を...

Nginx 経由で Tomcat9 クラスターを構築し、セッション共有を実現する

Nginx を使用して Tomcat9 クラスターを構築し、Redis を使用してセッション共有を実...

display または visibility を通じて HTML 要素を表示または非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

CSS による要素の中央揃えの原理の分析

CSS で要素の水平方向と垂直方向の中心を設定することは、非常に一般的な要件です。しかし、理論的には...

MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの概念、原則、および一般的な使用法につ...

sqlite を mysql スクリプトに移行する方法

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 パーレル # # https:/...

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...

ウェブページ HTML 順序付きリスト ol と順序なしリスト ul

データを整理するためのリストWeb ページの表示を制御する多数の HTML タグを学習した後、読者は...