ホームページ >データベース >mysql チュートリアル >MySQL における外部キーの役割を理解する

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

coldplay.xixi
coldplay.xixi転載
2020-08-31 16:59:362588ブラウズ

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 までご連絡ください。