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 時間サブシステムの時間表現例の詳細な説明

推薦する

1 つの記事で MySQL のプリコンパイルを理解する

1. プリコンパイルの利点私たちは皆、プリコンパイル機能を備えた JDBC の PreparedSt...

ヘッダーのチェックボックスをテキスト実装コードに変更するための選択テーブルを持つ要素

方法1: テーブル属性を使用する: header-cell-class-name テーブルインターフ...

WeChatアプレットの下部にあるタブバーがコンテンツをブロックする問題に対処する簡単な方法

WeChatアプレットでタブバーを設定すると、重要なコンテンツがブロックされ、iPhoneXなどの異...

Linux システム MySQL8.0.19 クイックインストールと構成チュートリアル図

目次1. 環境の紹介2. MySQL-8.0.19をインストールする3. MySQLを設定する1. ...

mysql8.0.23 msi インストールの超詳細なチュートリアル

1.MySqlをダウンロードしてインストールする公式ウェブサイトからMySqlデータベースをダウンロ...

プロジェクトに必須の 8 つの JavaScript コード スニペット

目次1. ファイル拡張子を取得する2. コンテンツをクリップボードにコピーする3. スリープ時間は何...

Linux と最もよく使用されるコマンドの紹介 (習得は簡単ですが、問題の 95% 以上を解決できます)

Linux は現在最も広く使用されているサーバー オペレーティング システムです。Unix をベー...

HTML テーブル マークアップ チュートリアル (30): セルの暗い境界線の色属性 BORDERCOLORDARK

セルでは、暗い境界線の色を個別に定義できます。基本的な構文<TD ボーダーコロダーク=colo...

MySQL ストアドプロシージャとストアドファンクションの詳細な説明

1 ストアドプロシージャ1.1 ストアドプロシージャとは何かストアド プロシージャは、特定の機能を実...

Dockerコンテナのタイムゾーン調整操作

Docker コンテナのタイムゾーンがホストマシンと一致しているかどうかを確認するにはどうすればよい...

MySQL ステートメントの配置と概要の紹介

SQL (Structured Query Language) ステートメント、つまり構造化クエリ言...

Vueバインディングクラスとバインディングインラインスタイルの実装方法

目次バインディングクラスインラインスタイルのバインディングバインディングクラス方法1:オブジェクト構...

Win10環境にMysql5.7.23をインストールする際の問題点と落とし穴

たくさんのチュートリアルを読みましたが、うまくインストールできませんでした。しばらく試行錯誤した後、...

MySQLのイベントスケジューラEVENTを理解する

MySQL のイベント スケジューラ EVENT は、Unix crontab や Windows ...

クリーンなXHTML構文

XHTML を書くには、明確な HTML 構文が必要です。 XHTMLを書くには、きれいなHTML構...