MySQL における外部キーの役割を理解する

coldplay.xixi
リリース: 2020-08-31 16:59:36
転載
2467 人が閲覧しました

MySQL における外部キーの役割を理解する

[関連する学習の推奨事項:mysql の学習]

MySQL 外部キーの役割:

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

2 つのテーブルを作成しましょう

CREATE TABLE `example1` ( `stu_id` int(11) NOT NULL DEFAULT '0', `course_id` int(11) NOT NULL DEFAULT '0', `grade` float DEFAULT NULL, PRIMARY KEY (`stu_id`,`course_id`) ); CREATE TABLE `example2` ( `id` int(11) NOT NULL, `stu_id` int(11) DEFAULT NULL, `course_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `f_ck` (`stu_id`,`course_id`), CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ); insert into example1 (stu_id,course_id,grade)values(1,1,98.5),(2,2,89); insert into example2 (id,stu_id,course_id)values(1,1,1),(2,2,2);
ログイン後にコピー

example1 テーブルを作成しました。このテーブルには、stu_id 学生番号、course_id コース番号、成績スコア

example2 テーブルには id、stu_id 学生番号、course_id コース番号が含まれており、外部キーを確立します。

2 つのテーブルにそれぞれデータを挿入します。

example2 の stu_id と course_id を example2 テーブルの外部キーと呼びます。example1 は親テーブル、example2 はワード テーブルです。2 つのテーブルは関連しています。ワード テーブル内のデータは、事前に削除する必要があります。親テーブルは削除できます。

の対応するデータ。example1

delete from example1 where stu_id=2;
ログイン後にコピー

のデータを削除してみましょう。

ERROR 1451 (23000) というエラーが表示されます。親行を削除または更新できません: 外部キー制約が失敗します (`test`.`example3`、CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) 参照 `example2` (`stu_id`, `course_id`) )

example2 のデータは example1 のデータに関連付けられているため、削除できず、外部キーとして機能するため、

次に、example2 テーブルのデータを最初に削除し、次に、example1 テーブルのデータを削除します

stu_id=2 の example2 から削除します。
stu_id=2 の example1 から削除;

これは成功しました;

イベント トリガーの制限:

削除時と更新時に、パラメーターがカスケードされます (外部キーに従います)。変更)、制限 (テーブル内の外部キーの変更を制限)、set Null (null 値の設定)、set Default (デフォルト値の設定)、[デフォルト] アクションなし

イベントトリガーの制限を見てみましょう。それのためのものです。 。 。

最初に外部キーを削除し、次にイベント トリガー制限を使用して外部キーを再確立します

alter table example2drop 外部キー f_ck; alter table example2 add CONSTRAINT `f_ck` FOREIGN KEY ( `stu_id` , `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ON DELETE CASCADE ON UPDATE CASCADE;

最初にデータを確認しましょう

mysql> select * from example1;select * from example2;
+--------+-----------+-------+ | stu_id | course_id | grade | +--------+-----------+-------+ | 1 | 1 | 98.5 | +--------+-----------+-------+ 1 row in set (0.00 sec) +----+--------+-----------+ | id | stu_id | course_id | +----+--------+-----------+ | 1 | 1 | 1 | +----+--------+-----------+ 1 row in set (0.00 sec)
ログイン後にコピー

現時点では、example1 と example2 の stu_id と course_id は両方とも 1 です。

example1 テーブルのデータを変更して、

# を見てみましょう。 ##update example1 set stu_id =3,course_id=3 where stu_id=1;
データを再度確認してください

mysql> select * from example1;select * from example2;
+--------+-----------+-------+ | stu_id | course_id | grade | +--------+-----------+-------+ | 3 | 3 | 98.5 | +--------+-----------+-------+ 1 row in set (0.00 sec) +----+--------+-----------+ | id | stu_id | course_id | +----+--------+-----------+ | 1 | 3 | 3 | +----+--------+-----------+ 1 row in set (0.00 sec)
ログイン後にコピー
example1 と example2 の stu_id と course_id が 3 になっていることがわかりましたか?

example1 のテーブルのデータを削除します

delete from example1 where stu_id=3;
これは削除でき、example2 のデータはなくなっていることがわかります;

##実際、これはデータの一貫性と整合性を維持するための外部キーの役割です。一緒に変更するかどうかは、イベント トリガーによって決定されます。

関連学習の推奨事項:
プログラミング ビデオ

以上がMySQL における外部キーの役割を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:oschina.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!