고유 제약 조건 위반 없이 MySQL에서 값을 교환하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-26 05:07:31
원래의
250명이 탐색했습니다.

How to Swap Values in MySQL without Unique Constraint Violations?

고유 제약 조건 위반 없이 MySQL에서 값 교환

MySQL에서는 고유 제약 조건이 적용될 때 두 행 사이의 값을 교환하는 것이 어려울 수 있습니다. 영향을 받은 열. 이 문제는 MySQL이 전체 문이 완료된 것이 아니라 각 행 업데이트 후에 제약 조건 검사를 시행하기 때문에 발생합니다.

이 제한 사항을 해결하려면 다음 해결 방법을 고려하세요.

<code class="sql">START TRANSACTION ;
    UPDATE tasks 
    SET priority = 
      CASE
        WHEN priority = 2 THEN -3 
        WHEN priority = 3 THEN -2 
      END 
    WHERE priority IN (2,3) ;

    UPDATE tasks 
    SET priority = - priority
    WHERE priority IN (-2,-3) ;
COMMIT ;</code>
로그인 후 복사

이 솔루션에서 , 두 업데이트가 모두 원자적으로 수행되도록 트랜잭션이 시작됩니다. 고유 제약 조건과의 충돌을 피하기 위해 음수 값이 우선 순위에 일시적으로 할당됩니다. 이후 다른 업데이트에서는 원래 우선순위에 음수 값을 할당하여 해당 값을 효과적으로 교환합니다.

또는 우선순위 열에 음수 값이 허용되지 않는 경우 임시 변수를 사용하거나 임시 테이블을 생성하여 값을 교환했습니다. 그러나 이러한 방법에는 여러 쿼리가 포함될 수 있습니다.

고유 제약 조건을 일시적으로 제거하는 것은 데이터 무결성을 손상시킬 수 있으므로 권장되지 않는다는 점에 유의하는 것이 중요합니다.

위 내용은 고유 제약 조건 위반 없이 MySQL에서 값을 교환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!