sourcecode

일부 행을 업데이트하는 동안 고유 키 무시(mariaDB)

codebag 2023. 7. 22. 09:59
반응형

일부 행을 업데이트하는 동안 고유 키 무시(mariaDB)

다음 테이블(mariaDB)이 있습니다.

+----+--------------+-------------+-------------+
| id | content_type | sort_number | document_id |
+----+--------------+-------------+-------------+
|  1 | text         |           1 |           1 |
|  2 | table        |           2 |           1 |
|  3 | text         |           3 |           1 |
|  4 | image        |           4 |           1 |
+----+--------------+-------------+-------------+

의 조합sort_number그리고.document_id고유합니다.

이제 위치 2에 새 항목을 추가하려면 다음 항목을 증분해야 합니다.sort_number모든 출품작 중에서sort_number >= 2한 걸음 한 걸음

이를 위해 다음 쿼리를 사용합니다.

update `table_name` set `sort_number` = sort_number +1 where `sort_number` > ? and `document_id` = ?

하지만 독특한 열쇠 때문에 (sort_number그리고.document_id) 오류가 발생했습니다.

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3' for key 'table_name_sort_number_document_id_unique'

나는 그 오류를 피하기 위해 지쳤습니다.SET unique_checks=0;하지만 여전히 오류가...

(더 나은) 업데이트 방법이 있습니까?sort_number하나의 질문에?

ORDER BY는 업데이트 쿼리에도 적용되므로 간단하게 다음을 수행할 수 있습니다.

SET @i:=0;
UPDATE items SET disp_order=@i:=@i+1 ORDER BY item_name;

마지막 행부터 업데이트를 시작하고 뒤로 이동하기만 하면 됩니다.

폴 슈피겔이 제공한 솔루션이 마음에 듭니다.내 쿼리는 다음과 같이 표시됩니다.

update `table_name` set `sort_number` = sort_number +1 where `sort_number` > ? and `document_id` = ? order by `sort_number` desc

업데이트 무시가 정답입니다.

UPDATE IGNORE `table_name` set `sort_number` = sort_number +1 where `sort_number` > ? and `document_id` = ?

언급URL : https://stackoverflow.com/questions/51658105/ignore-unique-key-while-updating-some-rows-mariadb

반응형