ホームページ >データベース >mysql チュートリアル >以下に、質問を組み込んで核心的な問題に焦点を当てたタイトルをいくつか示します。 * 日付範囲を重複せずに MySQL に挿入するにはどうすればよいですか? * MySQL の日付範囲の挿入: 重複の回避 - 解決策

以下に、質問を組み込んで核心的な問題に焦点を当てたタイトルをいくつか示します。 * 日付範囲を重複せずに MySQL に挿入するにはどうすればよいですか? * MySQL の日付範囲の挿入: 重複の回避 - 解決策

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 10:58:30726ブラウズ

Here are a few titles, incorporating questions and focusing on the core problem:

* How to Insert Date Ranges into MySQL Without Overlaps?
* MySQL Date Range Insertion: Avoiding Overlaps - Solutions and Challenges
* Can You Insert Non-Overlapping Date Ran

MySQL: 日付が重複しない場合に日付列に日付範囲を挿入する

問題:

次のテーブルが与えられたとします。利用可能な日付範囲 (avail) のタスクは、指定されたアカウント ID (acc_id) の既存の日付範囲と重複しない場合にのみ、新しい日付範囲をテーブルに挿入することです。

提案されたソリューション単一の Insert ステートメントの使用:

これを 1 つの Insert ステートメントで実現したいと思うかもしれませんが、残念ながら、MySQL 単独では直接不可能です。

代替案アプローチ:

  1. SQL CHECK 制約 (MySQL ではサポートされていません):

    SQL CHECK 制約は、このような重複を強制するための推奨される方法です。検証。ただし、MySQL は CHECK 制約をサポートしません。

  2. PostgreSQL CHECK 制約:

    PostgreSQL はテーブルの CHECK 制約をサポートします。 PostgreSQL への切り替えが実行可能なオプションである場合は、このアプローチを検討できます。

  3. MySQL トリガー:

    MySQL トリガーを使用して次のことを確認できます。挿入または更新操作の前にオーバーラップします。ただし、これには最新の MySQL バージョンが必要です。

  4. アプリケーション ロジック:

    通常、重複検証はアプリケーション ロジックで実行されます。 SELECT COUNT(id) ... ステートメントを使用して、新しいエントリに違反する行をチェックできます。カウントが 0 より大きい場合、挿入または更新は中止されます。

  5. 追加の考慮事項:

    • 検証では以下をチェックする必要があります。完全な重複または部分的な重複を含む、あらゆる種類の重複。
    • 検証では、同じ acc_id を持つすべての既存の範囲を考慮する必要があります。

結論:

単一の挿入ステートメントは MySQL では実現できない可能性がありますが、PostgreSQL CHECK 制約、MySQL トリガー、アプリケーション ロジックなどの代替アプローチにより、信頼性の高い重複検証を提供できます。

以上が以下に、質問を組み込んで核心的な問題に焦点を当てたタイトルをいくつか示します。 * 日付範囲を重複せずに MySQL に挿入するにはどうすればよいですか? * MySQL の日付範囲の挿入: 重複の回避 - 解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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