고유 제약 조건 위반 없이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!