外部キーの制約について疑問がありました。そこで、テスト用にこのような2つの簡単なテーブルを作成しました。
mysql> EXPLAIN parent;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.01 sec)
mysql> EXPLAIN child;
+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| parent_id | int(11) | NO | MUL | NULL | |
+-----------+---------+------+-----+---------+----------------+
現在、テーブルの作成時に外部キー制約を指定していません。後で次のように追加しました。
ALTER TABLE child
ADD CONSTRAINT parent_fk FOREIGN KEY(parent_id) REFERENCES parent(id);
engine
テーブルとそのに使用されているものを確認しましたInnoDB
。私の質問は...
いくつかの依存する子レコードがある親のレコードを削除することを制限しないのはなぜですか?デフォルトでは、それは私を制限するはずですよね?
外部キー制約を追加する前に外部キーフィールドにインデックスを作成すると、期待どおりに機能します。毎回そのようなインデックスを作成する必要がありますか?
- テーブルの作成後に何らかの制約を追加することは悪い習慣ですか?