mysql外部キー

導入

MySQL の外部キー制約は、2 つのテーブル データ間のリンクを確立するために使用されます。一方のテーブルのフィールドは、もう一方のテーブルの対応するフィールドによって制約されますつまり、外部キー制約を設定するには、少なくとも 2 つのテーブルが必要であり、制約が適用されるテーブルをスレーブ テーブル (子テーブル) と呼び、もう 1 つをマスター テーブル (親テーブル) と呼びます。奴隷関係。

テーブルの説明

現在、my_class (マスター テーブル) と my_stu (スレーブ テーブル) の 2 つのテーブルがあり、マスター テーブルとスレーブ テーブルは ID によって接続されています。
テーブルを作成する SQL ステートメント:

#主表
CREATE table my_class(
	id int PRIMARY KEY,
	`name` VARCHAR(32) not null
)
#从表
CREATE table my_stu(
	id int PRIMARY KEY,
	`name` VARCHAR(32),
	class_id int ,
	foreign key(class_id) REFERENCES my_class(id)
)

外部キーは制約をどのように反映するのでしょうか?

1. テーブルからデータを挿入する場合、メインテーブルに対応する外部キーが存在する必要があります。
my_class テーブル (メイン テーブル):

id (主キー) 名前
1 少人数クラス
2 中流階級
3 ビッグクラス
insert into my_stu(id,name,class_id) values(1,"小花",4); #错误,class_id=4在主表中找不到对应的id=4
insert into my_stu(id,name,class_id) values(1,"小花",3); #正确,符合外键约束规范,主表中存在id=3

2. メインテーブルからデータを削除する場合は、削除したデータに関連するデータがスレーブテーブルに存在しないことを必ず確認してください。
たとえば、my_stu テーブルは現在存在します。

id (主キー) 名前 class_id (外部キー)
1 小花 1
2 小紅 2
3 シャオ・チャン 3

(1, floret, 1) がテーブルに存在するため、次の削除はエラーを報告します。

delete from my_class where id=1; #错误

まずスレーブ テーブルの関連データを削除し、次にマスター テーブルのデータを削除する必要があります。

delete from my_stu where class_id=1;#删除从表关联数据
delete from my_class where id=1; 

予防

  1. 外部キーが指すメイン テーブル フィールドは主キーまたは一意である必要があります
  2. 外部キーをサポートするにはテーブルが innodb である必要があります
  3. 外部キーと主キーのタイプは一貫している必要があります
  4. 外部キーは null にすることができ、null の場合、メイン テーブルに対応する null が存在する必要はありません。

おすすめ

転載: blog.csdn.net/weixin_44866921/article/details/132882882