検索
ホームページよくある問題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 までご連絡ください。
Deepseek Webバージョンの公式入り口Deepseek Webバージョンの公式入り口Mar 12, 2025 pm 01:42 PM

国内のAI Dark Horse Deepseekは強く上昇し、世界のAI業界に衝撃を与えました! 1年半しか設立されていないこの中国の人工知能会社は、無料でオープンソースのモックアップであるDeepseek-V3とDeepseek-R1で世界的なユーザーから広く称賛されています。 Deepseek-R1は完全に発売され、パフォーマンスはOpenAio1の公式バージョンに匹敵します! Webページ、アプリ、APIインターフェイスで強力な機能を体験できます。ダウンロード方法:iOSおよびAndroidシステムをサポートすると、ユーザーはApp Storeを介してダウンロードできます。 Deepseek Webバージョン公式入り口:HT

deepseekの忙しいサーバーの問題を解決する方法deepseekの忙しいサーバーの問題を解決する方法Mar 12, 2025 pm 01:39 PM

DeepSeek:サーバーに混雑している人気のあるAIを扱う方法は? 2025年のホットAIとして、Deepseekは無料でオープンソースであり、OpenAio1の公式バージョンに匹敵するパフォーマンスを備えており、その人気を示しています。ただし、高い並行性は、サーバーの忙しさの問題ももたらします。この記事では、理由を分析し、対処戦略を提供します。 Deepseek Webバージョンの入り口:https://www.deepseek.com/deepseekサーバーに忙しい理由:高い並行アクセス:Deepseekの無料で強力な機能が同時に使用する多数のユーザーを引き付け、サーバーの負荷が過剰になります。サイバー攻撃:Deepseekが米国の金融産業に影響を与えることが報告されています。

詳細な検索Deepseek公式ウェブサイトの入り口詳細な検索Deepseek公式ウェブサイトの入り口Mar 12, 2025 pm 01:33 PM

2025年の初めに、国内のAI「Deepseek」が驚くべきデビューを果たしました!この無料のオープンソースAIモデルは、OpenAIのO1の公式バージョンに匹敵するパフォーマンスを備えており、Webサイド、アプリ、APIで完全に起動され、iOS、Android、およびWebバージョンのマルチターミナル使用をサポートしています。 DeepSeekの公式Webサイトおよび使用ガイドの詳細な検索:公式Webサイトアドレス:https://www.deepseek.com/sing for webバージョンの手順:上記のリンクをクリックして、DeepSeekの公式Webサイトを入力します。ホームページの[会話の開始]ボタンをクリックします。最初に使用するには、携帯電話検証コードでログインする必要があります。ログインした後、ダイアログインターフェイスを入力できます。 DeepSeekは強力で、コードを書き、ファイルを読み取り、コードを作成できます

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境