MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明

MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明

序文

MySQL テーブルの主キーと外部キーを作成するときは、次の点に注意する必要があります。

  • 主キーと外部キーの関係を確立する必要がある 2 つのテーブルのストレージ エンジンは InnoDB である必要があります。
  • 外部キー列と参照列のデータ型は類似している必要があります。つまり、暗黙的に変換できるデータ型である必要があります。
  • 外部キー列と参照列にはインデックスを作成する必要があります。外部キー列にインデックスが存在しない場合は、MySQL によって自動的にインデックスが作成されます。

1. データテーブルを作成し、主キーと外部キーの関係を設定するSQL文

テーブル demo.ChineseCharInfo を作成する
(
ID int NULLでないauto_increment、
漢字varchar(10)がnullでない、
主キー (ID)
)
エンジン=innodb auto_increment=1 デフォルト文字セット=utf8 照合=utf8_general_ci;
テーブル demo.ChinesePinyinInfo を作成する
(
ID int NULLでないauto_increment、
CharID int null、
ピンインvarchar(10) null,
トーン tinyint unsigned null、
主キー(ID)、
-- 方法 1: 外部キー名を指定しないでください。データベースは、削除カスケードまたは更新カスケードで自動的に外部キー (CharID) 参照 ChineseCharInfo(ID) を生成します。 
-- 方法2: 外部キー名(FK_Name)を指定する
-- 制約 FK_Name 外部キー (CharID) は、削除カスケードおよび更新カスケードで ChineseCharInfo(ID) を参照します 
)
エンジン=innodb auto_increment=1 デフォルト文字セット=utf8 照合=utf8_general_ci;

2. データテーブルがすでに存在する場合は、次の方法を使用して主キーと外部キーの関係を確立します。

-- テーブル (demo.ChinesePinyinInfo) のフィールド (CharID) に外部キーを追加し、外部キー名を (FK_Name) として指定します。
alter table demo.ChinesePinyinInfo に制約 FK_Name を追加し、外部キー (CharID) は ChineseCharInfo(ID) を参照します。
-- テーブル (demo.ChinesePinyinInfo) のフィールド (CharID) に外部キーを追加します。外部キー名を指定しないでください。データベースは自動的に外部キー名を生成します。alter table demo.ChinesePinyinInfo add foreign key (CharID) references ChineseCharInfo(ID);

3. 主キー制約と外部キー制約を削除する

-- 列のプロパティを変更して自動増分を削除します。最初の (ID) は元の列名で、2 番目の (ID) は新しい列名です。alter table demo.ChinesePinyinInfo change ID ID int not null;
-- テーブル (demo.ChinesePinyinInfo) の主キー制約を削除します。主キー列が自動増分列である場合は、まず列の自動増分を削除する必要があります。alter table demo.ChinesePinyinInfo drop primary key;
-- テーブル (demo.ChinesePinyinInfo) 内の (FK_Name) という名前の外部キーを削除します。alter table demo.ChinesePinyinInfo drop foreign key FK_Name;

4. 主キーと外部キーの関係の制約

子テーブルがプライマリ テーブルに存在しない外部キー値を作成しようとすると、データベースは挿入または更新操作を拒否します。

プライマリ テーブルが子テーブル内の既存または一致する外部キー値を更新または削除しようとする場合、最終的なアクションは、外部キー制約定義の on delete オプションと on update オプションによって異なります。

on delete と on update の両方に次の 4 つのアクションがあります。

  • カスケード: メイン テーブルが対応するデータ行を削除または更新すると、サブ テーブルもメイン テーブルに一致する行を削除または更新します (つまり、カスケード削除と更新)。
  • null を設定: メイン テーブルが対応するデータを削除または更新すると、サブ テーブルもメイン テーブルに一致する行の外部キー列を null に設定します。外部キー列が null 以外に設定されている場合は効果がありません。
  • アクションなし: データベースはプライマリ テーブルの削除または更新を拒否します。
  • 制限: データベースはメイン テーブルの削除または更新を拒否します。削除時または更新時のアクションが指定されていない場合、削除時または更新時のデフォルトのアクションは制限されます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL と Oracle のデータ型の対応 (表形式)
  • MySQL の結合テーブルにインデックスを作成する方法
  • MySQL 外部キー制約とテーブル関係の概要
  • Pythonはdict辞書型のデータをMysqlに保存し、テーブルと列を自動的に作成します
  • MySQL と PHP の基礎と応用トピック: データベース テーブルの作成
  • MySQL で 800 万エントリのテスト データ テーブルをすばやく作成する方法
  • MySQLは実際には3つの関係テーブルを作成します

<<:  Youdaの新しいプチビューの実装

>>:  Zabbix は DingTalk のアラーム機能を画像付きで設定します

推薦する

外部キー制約を持つテーブルデータを削除する MySQL メソッドの紹介

MySQLでテーブルやデータを削除する場合、 [エラー] 1451 - 親行を削除または更新できませ...

CentOS 6.9 で glibc ダイナミック ライブラリをアップグレードする詳細なプロセス

glibc は、gnu によってリリースされた libc ライブラリ、つまり c ランタイム ライブ...

Vueデータ変更検出の基本的な実装の簡単な分析

目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...

DockerでRedisを使用するための詳細な手順

1. はじめにこの記事では、Docker を使用して Redis を探索する方法を説明します。 Do...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

BT Baota Panel php7.3 および php7.4 が ZipArchive をサポートしない問題の解決方法

Baota PanelのPHP7.3バージョンがZipArchiveをサポートしていないため、プログ...

docker run -v はデータボリュームを異常にマウントし、コンテナのステータスは常に再起動になります。

問題点: docker run に -v パラメータを追加すると、コンテナは常に再起動状態になります...

Zabbix 5.0 ディスク自動検出と読み取り/書き込み監視の問題を分析する

ディスクを自動的に検出する構成キーの値注: このキー値は Linux プラットフォームでのみサポート...

HTMLは読み取り専用のテキストボックスを実装しており、コンテンツを変更することはできません。

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!--方法 1: onf...

Linux ifconfig コマンドの使用

1. コマンドの紹介ifconfig (ネットワーク インターフェイスを構成する) コマンドは、ネッ...

VueはCanvasを使用してランダムなサイズで重なり合わない円を生成します

目次キャンバス関連文書エフェクト画像表示ケースの完全なコード親コンポーネントコードサブコンポーネント...

ログインボックスのメールプロンプトを実装するネイティブJS

この記事では、登録またはログイン時に電子メール アドレスを入力する際のドロップダウン プロンプトのネ...

CSS3 回転キューブ問題の詳細な説明

3D座標の概念要素が回転すると、その座標軸も一緒に回転します。注 -y方向の問題立方体を回転させる効...

Bootstrap3.0 学習ノートテーブル関連

この記事では、Webサイトを作ったことがある人にとっては馴染みのあるテーブルについて主に説明します。...

Linux 上の Tomcat で MySQL にデータを挿入するときに中国語の文字化けが発生する問題を解決する

1. 問題Windows 上の Eclipse を使用して開発されたプロジェクトは Windows ...