MySQL での重複する日付範囲の処理
既存のテーブルに新しい日付範囲を挿入するのは、特に、テーブルとの重複を避けようとする場合に注意が必要です。既存のエントリ。このコンテキストでは、データベース内の特定のアカウント識別子 (acc_id) の範囲と重複する範囲を挿入することは避けたいと考えています。
MySQL には SQL CHECK 制約を使用して日付を検証するオプションがありますが、残念ながらこの機能はありません。 MySQL によってサポートされています。一方、PostgreSQL は CHECK 制約をサポートしていますが、データベース エンジンの切り替えはすべての状況で実現できるわけではありません。
代わりに、アプリケーション ロジックに検証を実装できます。 1 つの方法では、SELECT COUNT(id) ... ステートメントを使用して、INSERT を試行する前に重複をチェックします。
SELECT COUNT(id) FROM avail WHERE acc_id = '175' AND (start_date BETWEEN '2015-05-30' AND '2015-06-04') OR (end_date BETWEEN '2015-05-30' AND '2015-06-04') OR ('2015-05-30' BETWEEN start_date AND end_date) OR ('2015-06-04' BETWEEN start_date AND end_date);
返されたカウントが 0 より大きい場合、重複のため挿入は中止されます。
もう 1 つの方法では、MySQL のトリガーを使用します。 INSERT/UPDATE が発生する前に重複をチェックし、重複が見つかった場合はエラーをスローするようにトリガーをプログラムできます。ただし、トリガーには最新の MySQL バージョンが必要です。
最終的に、アプローチの選択は、アプリケーションの特定の要件と、サポートされている方法のいずれかで実装する実現可能性によって決まります。
以上がMySQL で日付範囲の重複を防ぐには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。