event_id
に一意のインデックスが必要です および 日コード> :
create unique index idx_recurrence_event_day on recurrence(event_id, day)
これにより、不要な重複を防ぐことができます。
すでに重複している場合は、それらを取り除くためのさまざまな方法があります。ただし、行ごとに一意のIDがあれば簡単です。これが、自動インクリメントされた主キーがすべてのテーブルで役立つ理由の1つです。
一意のIDがなくてもそれらを取り除く1つの方法は、次を使用することです:
alter ignore table recurrence add unique (event_id, day);
個人的には、インデックスを追加しても行が削除されないため、この方法は好きではありませんが、これは有効なMySQL拡張機能です。