94

MySQLの外部キー構造を使用する方法についての良い説明はありますか?

MySQLドキュメント自体からは完全にはわかりません。これまで、結合を使用した外部キ​​ーやプログラミングコードなどを扱ってきました。

そして、質問の2番目の部分では、MySQLの組み込み外部キーを使用して行うべき改善点はありますか?

4

4 に答える 4

122

FOREIGN KEYSデータに一貫性があることを確認してください。

それらは効率の意味でクエリを改善せず、いくつかの間違ったクエリを失敗させるだけです。

あなたがこのような関係を持っている場合:

CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))

department、の場合、いくつかの'が含まれている場合は削除できませんemployee

定義に指定ON DELETE CASCADEするFOREIGN KEYと、参照している行が参照されている行とともに自動的に削除されます。

制約として、FOREIGN KEY実際にはクエリの速度が少し遅くなります。

参照テーブルから削除するとき、または参照テーブルに挿入するときは、追加のチェックを実行する必要があります。

于 2009-04-16T17:30:56.823 に答える
32

実際の外部キーを使用する主な利点は、データの整合性を確保し、何かが変更または削除されたときに関連アイテムにカスケードアクションを設定できることです。

たとえば、フォーラムをプログラミングしていると想像してください。主キーを持つ「topics」テーブルがあり、トピックテーブルへの外部キーであるtopics.topic_id列を持つトピックに投稿が添付されている「posts」テーブルがあります。posts.topic_id

この外部キーの関係により、すべての投稿が有効なトピックに関連付けられます。あなたが持っている唯一のトピックがID#1を持っている場合、トピック#2に添付されたデータベースに投稿が存在することは不可能です。データベースはこれを保証します。

カスケードの利点として、トピックがトピックテーブルから削除された場合に、データベースがこのトピックに添付された投稿テーブル内のすべての投稿を自動的に削除するように設定できます。これは、手動で行う必要のある手順を削除するので便利です。これは、多数のテーブルがリンクされている場合に非常に複雑になる可能性があります。外部キーを使用すると、すべての関係を自動的にクリーンアップできます。

于 2009-04-16T17:33:52.073 に答える
11

1.外部キーは、データの一貫性を確保するだけです。

2.外部キー定義への削除カスケードを適用すると、親行が削除されるときに参照行が自動的に削除されます。

3. Update Cascadeを外部キー定義に適用すると、親行が更新されるときに子行が自動的に更新されます。

クエリ:ALTER TABLE child ADD FOREIGN KEY(parent_id)REFERENCES parent(id)ON UPDATE CASCADE ON DELETE CASCADE;

  1. 直接の親テーブルを削除することはできません。最初に親テーブルを削除するよりも、子テーブルから外部キーを削除してください。
于 2015-09-10T07:22:52.687 に答える
7

主な利点は、テーブルに入力できる値を制限できることです。参照されているテーブルに存在しない値を入力しようとすると、入力できなくなります。

また、参照されるテーブルの値を更新または削除する場合は、値を自動的に更新するか、その値を含む行をカスケードで削除するように設定できます。

それは確かにあなたのコードを活用する素晴らしい機能です。

于 2009-04-16T17:31:25.217 に答える