1. ホーム
  2. mysql

[解決済み] phpMyAdminで外部キーを設定する?

2022-03-16 21:01:53

質問

phpMyAdminを使用してデータベースをセットアップしています。2つのテーブル( foobar ), を主キーとするインデックスを持つ . 私はリレーショナルテーブルを作成しようとしています ( foo_bar ) の間で、それらの主キーを外部キーとして使用します。

私はこれらのテーブルをMyISAMとして作成しましたが、MyISAMは外部キーをサポートしないと読んだので、3つすべてをInnoDBに変更しました。すべて id フィールドは INT(11) .

を選択すると foo_bar テーブルで、quot;relation view"のリンクをクリックし、FK列を設定しようとすると database.foo.iddatabase.bar.id というメッセージが表示されます。 インデックスが定義されていません!" 各カラムの横に表示されます。

何が足りないのでしょうか?

明確化・更新

シンプルにするために、phpMyAdminを使い続けたいと思います。現在、PHP/CSS/Javascriptに集中できるXAMPPを使用していますが、phpMyAdminが付属しているので、簡単です。

また、明示的な外部キーはまだ設定できていませんが、リレーショナル・テーブルを持っているので、このような結合を行うことができます。

SELECT * 
FROM foo 
INNER JOIN foo_bar 
ON foo.id = foo_bar.foo_id 
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

ただ、FKをデータベースで明示的に定義しておかないと、不安なんです。

どのように解決するのですか?

phpMyAdminを使用してリレーションを設定する場合、2つのことを行う必要があります。まず、参照元テーブルの外部キーカラムにインデックスを定義する必要があります(あなたの場合は、foo_bar.foo_idですね)。次に、リレーション・ビュー(参照元テーブル)で、参照するカラム(あなたの場合はfoo.id)を選択し、on updateとon deleteアクションを実行します。

複数のテーブルを連携させる場合、外部キーは便利だと思います。特に、参照オプションを正しく設定すれば、削除スクリプトは非常に短くなります。

EDIT: 両方のテーブルで InnoDB エンジンが選択されていることを確認してください。