初心者のためのMySQL外部キーの設定方法

初心者のためのMySQL外部キーの設定方法

外部キーの役割

データの一貫性、整合性を維持し、外部キー テーブルに格納されているデータを制御することが主な目的です。 2 つのテーブルを関連付けるには、外部キーは外部テーブル内の列の値のみを参照できます。

例えば:

2つのテーブル

表aには顧客番号と顧客名が含まれています

テーブル b には各顧客の注文が格納されます。

外部キーあり

テーブル b に顧客 x の注文がないことを確認した後でのみ、テーブル a から顧客 x を削除できます。

外部キーを確立するための前提条件: このテーブルの列は外部キーと同じタイプである必要があります (外部キーは外部テーブルの主キーである必要があります)。

主キーキーワードを指定します: 外部キー (列名)

外部キーキーワードを参照: <外部キーテーブル名> (外部キー列名) を参照

イベント トリガーの制限: 削除時および更新時に、パラメータ カスケード (外部キーの変更に従う)、制限 (テーブル内の外部キーの変更を制限する)、Null の設定 (NULL 値を設定する)、デフォルトの設定 (デフォルト値を設定する)、[default] アクションなしを設定できます。

例えば:

outTable テーブル主キー ID タイプ int

外部キーを持つテーブルを作成します。

  テーブルtempを作成します(
  id int、
  名前 char(20)、
  外部キー(id)は、削除カスケードおよび更新カスケードでoutTable(id)を参照します。

注: 外部テーブル outTable の id 列を参照するには、id 列を外部キーとして設定します。外部キーの値が削除されると、このテーブル内の対応する列が除外されます。外部キーの値が変更されると、このテーブル内の対応する列の値が変更されます。

mysql 外部キー設定方法

MySQL 外部キー設定方法 / インデックスを作成するときに、親テーブルを削除/更新するときに子テーブルに対して実行する対応する操作を指定できます。

制限、カスケード、null およびアクションなしの設定、デフォルトの設定が含まれます。

  • 制限、アクションなし:
    外部キー制約をすぐに確認してください。子テーブルに一致するレコードがある場合、親テーブルに関連するレコードは削除または更新できません。
  • カスケード:
    親テーブルが削除/更新されると、子テーブル内の対応するレコードもそれに応じて削除/更新されます。
  • null に設定:
    親テーブルが削除/更新されると、子テーブルの対応するフィールドは null に設定されます。このとき、子テーブルの外部キーを null 以外に設定できないことに注意してください。
  • デフォルトを設定:
    親テーブルに削除/更新があった場合、子テーブルは外部キーをデフォルト値に設定しますが、InnoDB はそれを認識できません。実際、MySQL 5.5 以降のデフォルトのストレージ エンジンは InnoDB であるため、この外部キー方式を設定することは推奨されません。環境の MySQL が 5.5 より前で、デフォルトのストレージ エンジンが myisam である場合は、これを検討できます。

set null、setdefault、cascade を選択する場合は、誤った操作によってデータが失われる可能性があるため、注意してください。

上記の説明が十分に明確でない場合は、次の例を参照してください。

国テーブルは親テーブル、country_id は主キー、city は子テーブル、外部キーは country_id で、これは国テーブルの主キー country_id に対応します。

テーブルcountryを作成(
	country_id smallint unsigned not null auto_increment,
	国varchar(50)がnullではない、
	last_update timestamp は null ではありません。デフォルトの current_timestamp は、更新時の current_timestamp です。
	主キー(country_id)
)engine=INNODB デフォルト文字セット=utf8;

テーブル「city」を作成します(
  `city_id` smallint(5) unsigned NOT NULL auto_increment,
  `city` varchar(50) NOT NULL,
  `country_id` smallint(5) 符号なし NOT NULL,
  `last_update` タイムスタンプ NOT NULL デフォルト CURRENT_TIMESTAMP 更新時 CURRENT_TIMESTAMP、
  主キー (`city_id`)、
  キー `idx_fk_country_id` (`country_id`)、
  制約 `fk_city_country` 外部キー (`country_id`) 参照 `country` (`country_id`) 削除制限 ON UPDATE CASCADE
)ENGINE=InnoDB デフォルト文字セット=utf8;

たとえば、上記の 2 つの新しく作成されたテーブルの場合、サブテーブルの外部キーは、on delete restrict ON UPDATE CASCADE mode として指定されます。メイン テーブルがレコードを削除するときに、サブテーブルに対応するレコードがある場合は削除は許可されません。メイン テーブルがレコードを更新するときに、サブテーブルに一致するレコードがある場合は、サブテーブル内の対応するレコードがそれに応じて更新されます。

例えば:

国の値に挿入します(1, 'wq',now());
国から*を選択します。
都市の値に挿入します(222,'tom',1,now());
都市から*を選択します。

country_id=1 の国から削除します。
国を更新します。country_id=1 の場合、country_id=100 を設定します。
country='wq' の country から * を選択します。
city='tom' の場合、city から * を選択します。

要約する

これで、MySQL 外部キーの設定方法についての記事は終了です。MySQL 外部キーの設定方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 外部キー設定方法の例
  • 主キー、外部キー、複合主キーを作成するための MySQL ステートメント
  • MySQL 外部キーの使用法の詳細な説明
  • MySQL 外部キーの使用法と詳細な説明
  • mysql 外部キーを作成する
  • MySQL の主キーと外部キーを理解するための簡単なチュートリアル
  • MySQL 外部キー削除問題の概要
  • MySQL の外部キー制約の詳細な説明

<<:  ウェブサイトのフロントエンドパフォーマンスの最適化: JavaScript と CSS

>>:  HTML webpackプラグインの使用に関する簡単な分析

推薦する

ホストがアクセスできるようにMySQLの権限を変更する方法

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

Vue でカスタムパスのエイリアスを設定する方法

Vue でカスタム パス エイリアスを設定する方法日常の開発では、モジュールやコンポーネントをインポ...

MySQL 実験: explain を使用してインデックスの傾向を分析する

概要インデックス作成は、MySQL で習得しなければならないスキルであり、MySQL クエリの効率を...

JS の精度外数値問題の解決

精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...

Nodejs 探索: シングルスレッドの高並行性の原理を深く理解する

目次序文一目でわかる建築オペレーティングシステムとの対話シングルスレッドイベント駆動/イベントループ...

MySQLでよく使われる文字列関数トップ10の詳細な説明

こんにちは、みんな!技術の話ばかりで髪は切らないトニーです。データベース関数は、何らかの機能を持ち、...

入力が正しいにもかかわらず、MySQL 8.0 でアクセスが拒否される問題を解決する

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

MySQL 5.7.19 インストールディレクトリに my.ini ファイルを作成する方法

前回の記事では、MySQL 5.7.19 無償インストール版 (64 ビット) の設定方法についての...

iview権限管理の実装

目次iview-admin2.0 組み込み権限管理権限に基づいてコンポーネントの表示を制御するカスタ...

CSS で 2 列レイアウトを実現する N 通りの方法

1. 2 列レイアウトとは何ですか? 2 列レイアウトには、左側が固定幅で右側が適応幅のレイアウトと...

Docker はキューとタスクのスケジューリングを実現するために Laravel アプリケーションをデプロイします

前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...

Vue はアップロードした画像に透かしを追加できるようになりました (アップグレード版)

vueプロジェクトでは、アップロードした画像に透かしを追加して参照できるようにするアップグレード版...

Nginx での SSL 証明書のインストールと展開手順の概要

目次問題の説明:インストール手順1. 準備2. サーバーにリモート接続する3. 証明書と秘密鍵ファイ...

jQueryカルーセル機能を実装する方法

この記事では、jQueryカルーセル機能の実装コードを参考までに共有します。具体的な内容は次のとおり...

Dockerで同じIDを持つ2つのイメージを削除する

今日 Docker コンテナを作成したとき、誤ってイメージの名前を間違って入力しました。その結果、コ...