[関連する学習の推奨事項: 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;example1 と example2 の stu_id と course_id が 3 になっていることがわかりましたか?example1 のテーブルのデータを削除しますdelete from example1 where stu_id=3;これは削除でき、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)
##実際、これはデータの一貫性と整合性を維持するための外部キーの役割です。一緒に変更するかどうかは、イベント トリガーによって決定されます。
関連学習の推奨事項:プログラミング ビデオ
以上がMySQL における外部キーの役割を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。