두 개의 다른 행 (역할)에 두 개의 열을 교환하려고합니다. 가능하다면 사용자 변수를 설정하여이 작업을 수행 할 수 있지만 모든 작업을 하나의 쿼리로 수행하려고했습니다.기본 키 충돌로 MySQL의 두 개의 다른 행에있는 두 개의 열을 바꾼다
내 쿼리는 다음과 같습니다
이UPDATE table AS t1, table AS t2
SET t1.role = 'standby', t2.role = 'primary'
WHERE t1.sysid = t2.sysid AND t1.role = 'primary' AND t2.role = 'standby';
테이블 구조가
sysid | role | devid
1 | primary | dev1
1 | standby | dev2
기본 키가 sysid이다, 역할 문제는 시간에 기본 키 사이의 갈등 것 같다
오류 : Error Code: 1706. Primary key/partition key update is not allowed since the table is updated both as 't1' and 't2'.
MySQL 이후 프로세스는 왼쪽에서 오른쪽으로, 나는 충돌을 피하기 위해 첫번째 (T1)에 임시 값을 설정 시도,하지만 여전히 같은 오류로 인해 실패 :
SET t1.role = 'tmp', t2.role = 'primary', t1.role = 'standby'
은 MySQL과이를 달성 할 수있는 방법이 있나요?
그래, 나는 그것이 갈 길이라고 생각했다. 나는 하나의 쿼리에서이 모든 작업을 시도했지만 MySQL이 자체 조인에서 기본 키를 교환하는 것을 좋아하지 않는 것처럼 보입니다. – Devon
질문은 ... 트랜잭션에 있어야합니까? 나는 생각하고있다. 하나가 실패하면, 그들은 모두 실패 할 것 같습니다. – Devon
거래에 넣는 것이 더 낫다 – Szymon