外部キー制約定義の一部である "on delete"キーワードを調べる必要があります。 基本的には4つのオプションがあります。
- NO ACTIONは(何もしない)
- CASCADE(子aswellを削除します)
- のSET NULL(ヌルに参照フィールドを設定します)
- のSET DEFAULT(設定デフォルト値への参照フィールド)
例は次のようになります
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE -- replace CASCADE with your choice
) ENGINE=INNODB;
(この例では、より詳細にはここを見て:http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html)を
あなたが今、あなたの制約を変更したい場合は、あなたが最初にそれをドロップすると、例えばのような新しいものを作成する必要があります。
ALTER TABLE child
ADD CONSTRAINT fk_name
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE; -- replace CASCADE with your choice
私はこれが助けてくれることを願っています。また言及するには、親を実際に削除しないで、別のブール型列「削除済み」を作成することをお勧めします。 「選択」クエリでは、その「削除済み」列でフィルタリングします。 このエントリの履歴は失われないという利点があります。
いくつかのコードを示してください。たぶん私はあなたを助けることができます。 – Francisunoxx