MySQL での重複する日付範囲の処理
既存のテーブルに新しい日付範囲を挿入することは、特に重複を避けようとする場合には難しい場合があります。既存のエントリ。このコンテキストでは、データベース内の特定のアカウント識別子 (acc_id) の範囲と重複する範囲を挿入することは避けたいと考えています。
MySQL には SQL CHECK 制約を使用して日付を検証するオプションが用意されていますが、残念ながらこの機能はありません。 MySQL によってサポートされています。一方、PostgreSQL は CHECK 制約をサポートしていますが、データベース エンジンの切り替えはすべての状況で実現できるわけではありません。
代わりに、アプリケーション ロジックに検証を実装できます。 1 つのアプローチでは、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 より大きい場合、重複のため挿入は中止されます。
別の方法では、 MySQLのトリガー。 INSERT/UPDATE が発生する前に重複をチェックし、重複が見つかった場合はエラーをスローするようにトリガーをプログラムできます。ただし、トリガーには最新の MySQL バージョンが必要です。
最終的に、アプローチの選択は、アプリケーションの特定の要件と、サポートされている方法のいずれかで実装する実現可能性によって決まります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3