나는 다음과 같은 테이블이 있습니다MySQL 오류 1062 (23000) : 중복 항목. 고유 제약 조건을 위반하지 않습니다 업데이트 행
CREATE TABLE `user_favourite_posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL
PRIMARY KEY (`id`),
UNIQUE KEY `user_post_unique` (`user_id`,`post_id`))
내가 = 1005 다음과 같은 일을 POST_ID하는 (1000, 1001)에 post_id를 가진 모든 행을 업데이트하려고 : 중복 키 'user_post_unique'에 대한 항목 1005 :
ERROR 1062 (23000) :
update user_posts set post_id=1005 where post_id in(1000, 1001);
하지만 때문에 user_post_unique 제약의 다음과 같은 오류를 얻고있다
좋습니다. 이것은 예상대로 작동합니다.
그러나 제약 조건을 위반하지 않을 모든 행을 업데이트하고 싶습니다. 한 문장으로 가능합니까? 나는 하위 쿼리에서 같은 테이블을 사용할 수 없기 때문에 일부 mysql 플래그를 제거하거나 임시 테이블을 사용하지 않고이를 수행하는 방법을 이해할 수 없다.
UPDATE :
예 갖는 다음과 같은 데이터
+-------+---------+---------+
| id | user_id | post_id |
+-------+---------+---------+
| 4581 | 2 | 1001 |
| 9739 | 2 | 1005 |
| 7324 | 3 | 1001 |
+-------+---------+---------+
나는 문제없이 모든 행을 업데이 트하려는, 그래서 id 4581
과 하나가 같은
어, 할 수 없습니다. 그래서 원하지 않는 패턴을 방지하기 위해 테이블에 고유 한 제한 조건이있는 것입니다. –
예, 이해합니다. 지금 내가 원하는 것은 그 관계를 아직 가지고 있지 않은 사용자로 그 행을 갱신하는 것이므로 지금 질문을 편집 중입니다. 복제의 경우 나는 그 중 하나를 제거합니다. – y2josei
그 소리가 틀립니다. 고든이 맞아요. 여기 제약이있어 일을 어지럽 힙니다. 요구 사항에 대해 더 신중하게 생각해야합니다. –