ホームページ よくある問題 mysqlには外部キーがありますか?

mysqlには外部キーがありますか?

Jun 13, 2023 pm 01:29 PM
mysql 外部キー

Mysql には外部キーがあり、主にマスター テーブルとスレーブ テーブル間の関係を確立するために使用され、2 つのテーブル内のデータの接続を確立し、テーブル内のデータの一貫性と整合性を制約できます。 2つのテーブル。メイン テーブルからレコードが削除されると、それに応じてスレーブ テーブルの対応するレコードも変更する必要があります。テーブルには 1 つ以上の外部キーを持つことができます。外部キーには NULL 値を指定できます。NULL 値でない場合、各外部キーの値は、メイン テーブルの主キーの特定の値、およびメイン テーブルの列の数と対応するデータ型に等しい必要があります。外部キーはメインテーブルの主キーと同じである必要があります。

mysqlには外部キーがありますか?

このチュートリアルのオペレーティング システム: Windows 10 システム、mysql バージョン 8.0、Dell G3 コンピューター。

mysql には外部キーがあります。

MySQL 外部キー (FOREIGN KEY)

外部キーは、別のテーブルの別のフィールドと一致する、指定されたテーブル内のフィールドです。外部キーは関連テーブル内のデータに制約を設定するため、MySQL は参照整合性を維持できます。

外部キーは、マスター テーブルとスレーブ テーブル間の関連付けを確立し、2 つのテーブルのデータの接続を確立し、2 つのテーブルのデータの一貫性と整合性を制約するために使用されます。

関連付けられたリレーションシップを持つ 2 つのテーブルの場合、関連付けられたフィールドの主キーが配置されているテーブルがメイン テーブル (親テーブル) であり、外部キーが配置されているテーブルが副テーブル (子テーブル) です。テーブル)。

レコードがメイン テーブルから削除されると、それに応じてテーブルの対応するレコードも変更する必要があります。テーブルには 1 つ以上の外部キーを含めることができ、外部キーは null にすることもできます。null でない場合、各外部キーの値はメイン テーブルの主キーの特定の値と等しくなければなりません。

サンプル データベースからの次のデータベース図を見てみましょう。

mysqlには外部キーがありますか?

顧客と注文という 2 つのテーブルがあります。各顧客には 0 個以上の注文があり、各注文は 1 人の顧客にのみ属することができます。 Customers テーブルと Orders テーブルの関係は 1 対多で、customerNumber フィールドで指定されたテーブル内の外部キーによって注文が確立されます。 Customers テーブルの customerNumber フィールドは、orders テーブルの customerNumber 主キー フィールドに関連付けられています。

customers テーブルは親テーブルまたは参照テーブルと呼ばれ、orders テーブルは子テーブルまたは参照テーブルと呼ばれます。

外部キーには、列または列のグループを指定できます。子テーブルの列は通常、親テーブルの主キー列を参照します。

テーブルには複数の外部キーを持つことができ、子テーブルの各外部キーは異なる親テーブルを参照できます。

子テーブルの行には、親テーブルに存在する値が含まれている必要があります。たとえば、orders テーブルの各注文レコードには、customers テーブル customerNumber に存在する値が含まれている必要があります。したがって、複数の注文が同じ顧客を参照することができ、この関係は 1 (顧客) 対多 (注文) または 1 対多と呼ばれます。

子テーブルと親テーブルが同じである場合があります。外部キーは、テーブルの主キーを参照します。たとえば、次のemployees テーブル:

mysqlには外部キーがありますか?

reportTo 列は、employeeNumber を列として参照する外部キーです。従業員テーブルの主キーは従業員数を反映します。従業員間のレポート構造、つまり各従業員が別の従業員に直属し、従業員はゼロ個以上の直属の部下を持つことができます。このようなテーブルに対してデータをクエリするのに役立つ自己結合に関するチュートリアルがあります。

reportTo 外部キーは、再帰的または自己参照外部キーとも呼ばれます。

外部キーは参照整合性を強制し、データの一貫性と整合性を自動的に維持するのに役立ちます。たとえば、存在しない顧客に対して注文を作成することはできません。

さらに、customerNumber 外部キーの削除操作にカスケードを設定して、customers テーブルで顧客が削除されると、その顧客に関連付けられているすべての注文も削除されるようにすることができます。これにより、複数の DELETE ステートメントまたは DELETE JOIN ステートメントを使用する時間と労力が節約されます。

削除と同様に、更新操作で customerNumber 外部キーのカスケードを定義して、複数の UPDATE ステートメントまたは UPDATE JOIN ステートメントを使用せずにテーブル間の更新を実行することもできます。

注: MySQL では、InnoDB ストレージ エンジンが外部キーをサポートしているため、外部キー制約を使用するには InnoDB テーブルを作成する必要があります。

mysql が外部キーを定義する場合、次のルールに従う必要があります。

メイン テーブルはデータベースにすでに存在しているか、現在作成中のテーブルである必要があります。後者の場合、マスターテーブルとスレーブテーブルは同一のテーブルとなり、このようなテーブルを自己参照テーブルと呼び、この構造を自己参照整合性と呼びます。

主キーはメインテーブルに定義する必要があります。

主キーには null 値を含めることはできませんが、外部キーでは null 値が許可されます。つまり、外部キーのすべての非 null 値が指定された主キーに出現する限り、外部キーの内容は正しいことになります。

メインテーブルのテーブル名の後に列名または列名の組み合わせを指定します。この列または列の組み合わせは、主テーブルの主キーまたは候補キーである必要があります。

外部キーの列数は、メイン テーブルの主キーの列数と同じである必要があります。

外部キーの列のデータ型は、メイン テーブルの主キーの対応する列のデータ型と同じである必要があります。

テーブルの外部キーを作成する

MySQL が外部キーを作成する構文

次の構文は、CREATE TABLE ステートメントのサブテーブルに外部キーを定義する方法を説明しています。

CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action
ログイン後にコピー

構文を詳しく学びましょう:

CONSTRAINT子句允许您为外键约束定义约束名称。如果省略它,MySQL将自动生成一个名称。

FOREIGN KEY子句指定子表中引用父表中主键列的列。你可以把一个外键名称放在FOREIGN KEY子句之后,或者让MySQL为你创建一个名字。请注意,MySQL会自动使用foreign_key_name名称创建索引。

REFERENCES子句指定子表中的列所引用的父表及列。在规定的子表和父表的列数FOREIGN KEY和REFERENCES必须相同。

ON DELETE子句允许您定义删除父表中的记录时子表中记录的内容。如果省略ON DELETE子句并删除父表中包含子表中记录的记录,MySQL将拒绝删除。此外,MySQL还为您提供操作,以便您可以使用其他选项,例如ON DELETE CASCADE ,要求MySQL删除子表中的记录,当父表中的记录被删除时,记录将引用父表中的记录。如果您不希望删除子表中的相关记录,请改用ON DELETE SET NULL操作。MySQL会将子表中的外键列值设置为NULL删除父表中的记录时,条件是子表中的外键列必须接受NULL值。请注意,如果您使用ON DELETE NO ACTION或ON DELETE RESTRICT操作,MySQL将拒绝删除。

ON UPDATE子句使您可以指定更新父表中的行时子表中的行会发生什么。您可以省略ON UPDATE子句,以便在更新父表中的行时让MySQL拒绝对子表中行的任何更新。ON UPDATE CASCADE操作允许您执行跨表更新,并且当更新父表ON UPDATE SET NULL中的行时,操作会将子表中的行中的值重置为值NULL。ON UPDATE NO ACTION或UPDATE RESTRICT行动拒绝任何更新。

MySQL创建表外键示例

下面的示例创建一个dbdemo数据库和两个表:categories和 products.每个类别具有一个或多个产品和每个产品只属于一个类别。products表中的cat_id字段被定义为带有UPDATE ON CASCADE和DELETE ON RESTRICT操作的外键。

CREATE DATABASE IF NOT EXISTS dbdemo;
  
USE dbdemo;
  
CREATE TABLE categories(
   cat_id int not null auto_increment primary key,
   cat_name varchar(255) not null,
   cat_description text
) ENGINE=InnoDB;
  
CREATE TABLE products(
   prd_id int not null auto_increment primary key,
   prd_name varchar(355) not null,
   prd_price decimal,
   cat_id int not null,
   FOREIGN KEY fk_cat(cat_id)
   REFERENCES categories(cat_id)
   ON UPDATE CASCADE
   ON DELETE RESTRICT
)ENGINE=InnoDB;
ログイン後にコピー

将外键添加到表中

MySQL添加外键语法

要将外键添加到现有表,请使用带有上述外键定义语法的ALTER TABLE语句:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action;
ログイン後にコピー

MySQL添加外键示例

现在,让我们添加一个名为vendors的新表,并更改products表以包含供应商ID字段:

USE dbdemo;
  
CREATE TABLE vendors(
    vdr_id int not null auto_increment primary key,
    vdr_name varchar(255)
)ENGINE=InnoDB;
  
ALTER TABLE products
ADD COLUMN vdr_id int not null AFTER cat_id;
ログイン後にコピー

要向表中添加外键products,请使用以下语句:

ALTER TABLE products
ADD FOREIGN KEY fk_vendor(vdr_id)
REFERENCES vendors(vdr_id)
ON DELETE NO ACTION
ON UPDATE CASCADE;
ログイン後にコピー

mysqlには外部キーがありますか?

 现在,products表有两个外键,一个引用categories表,另一个引用vendors表。

以上がmysqlには外部キーがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

MySQLおよびPHPMYADMIN:コア機能と関数 MySQLおよびPHPMYADMIN:コア機能と関数 Apr 22, 2025 am 12:12 AM

MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

MySQL対その他のプログラミング言語:比較 MySQL対その他のプログラミング言語:比較 Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

データベース接続の解決問題:Minii/DBライブラリを使用する実用的なケース データベース接続の解決問題:Minii/DBライブラリを使用する実用的なケース Apr 18, 2025 am 07:09 AM

小さなアプリケーションを開発する際には、軽量データベース操作ライブラリをすばやく統合する必要性という厄介な問題に遭遇しました。複数のライブラリを試した後、私はそれらがあまりにも多くの機能を持っているか、あまり互換性がないかのどちらかであることがわかりました。最終的に、私は問題を完全に解決したYii2に基づいた単純化されたバージョンであるMinii/DBを見つけました。

Laravel Frameworkインストール方法 Laravel Frameworkインストール方法 Apr 18, 2025 pm 12:54 PM

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

MySQLモードの問題を解決する問題:TheliamySQLModescheckerモジュールの使用経験 MySQLモードの問題を解決する問題:TheliamySQLModescheckerモジュールの使用経験 Apr 18, 2025 am 08:42 AM

Theliaを使用してeコマースWebサイトを開発するとき、私はトリッキーな問題に遭遇しました:MySQLモードが適切に設定されていないため、いくつかの機能が適切に機能しません。いくつかの調査の後、TheliamysQlModescheckerというモジュールを見つけました。これは、Theliaが必要とするMySQLパターンを自動的に修正できるため、問題を完全に解決できます。

MySQLの外国キーの目的を説明してください。 MySQLの外国キーの目的を説明してください。 Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

mysqlとmariadbを比較対照します。 mysqlとmariadbを比較対照します。 Apr 26, 2025 am 12:08 AM

MySQLとMariaDBの主な違いは、パフォーマンス、機能、ライセンスです。1。MySQLはOracleによって開発され、Mariadbはフォークです。 2. Mariadbは、高負荷環境でパフォーマンスを向上させる可能性があります。 3.MariaDBは、より多くのストレージエンジンと機能を提供します。 4.MySQLは二重ライセンスを採用し、MariaDBは完全にオープンソースです。既存のインフラストラクチャ、パフォーマンス要件、機能要件、およびライセンスコストを選択する際に考慮する必要があります。