ホームページ  >  記事  >  データベース  >  MySQL で日付範囲の重複を防ぐには?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 10:09:30788ブラウズ

How to Prevent Date Range Overlaps in MySQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。