>  기사  >  데이터 베이스  >  다음은 질문을 통합하고 핵심 문제에 초점을 맞춘 몇 가지 제목입니다. * 중복 없이 MySQL에 날짜 범위를 삽입하는 방법은 무엇입니까? * MySQL 날짜 범위 삽입: 중복 방지 - 솔루션

다음은 질문을 통합하고 핵심 문제에 초점을 맞춘 몇 가지 제목입니다. * 중복 없이 MySQL에 날짜 범위를 삽입하는 방법은 무엇입니까? * MySQL 날짜 범위 삽입: 중복 방지 - 솔루션

Susan Sarandon
Susan Sarandon원래의
2024-10-27 10:58:30648검색

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 문 사용:

단일 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.