「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL で日付範囲の重複を防ぐには?

MySQL で日付範囲の重複を防ぐには?

2024 年 11 月 12 日に公開
ブラウズ:855

How to Prevent Date Range Overlaps in MySQL?

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