내 게임에서 아이템이 저장되는 방법에 대해 사용되지 않는 일부 코드를 변경하려고합니다. 현재 방법은 모든 항목을 삭제 한 다음 모든 항목을 삽입 한 다음 장비 (항목의 하위 표)를 삽입하는 것입니다. 성능에 큰 영향을 주었고 INSERT를 INSERT ON DUPLICATE KEY UPDATE로 변경하면 성능에 큰 영향을 미치는지 궁금합니다.중복 키 업데이트시 삽입
그렇다면 후속 질문이 있습니다. 제 계획은 원래의 inventoryitemid으로 항목을로드하고 나중에 저장하기위한 키로 사용합니다.
INSERT INTO inventoryitems (inventoryitemid, itemid) VALUES (?, ?) ON DUPLICATE KEY UPDATE ...
몇 가지 조건을 놓칠 수 :이 다음 문을 실행할 때
문제입니다. 내가 원하는 것은 MySQL이 INSERT에 디폴트 값 (자동 증가)이 없으면, 그렇지 않으면 UPDATE이다. 현재 INSERT에서 키가 생성되기 때문에 inventoryItemid가 0 인 새 항목이 생성됩니다.
TL; DR : I (새 항목 0 inventoryitemid으로 게임 내에서 생성되기 때문에) 미리 inventoryitemid없이 DUPLICATE KEY UPDATE ON 삽입하는 방법이 필요하다. 현재로서는 inventoryitemid가 미리 무엇인지 지정해야하며 해당 정보에 액세스 할 수 없습니다.
첫째 목표와 문제
- 봅니다 미리 inventoryitemid없이 데이터베이스에 존재하지 않는 새로운 항목을 삽입합니다.
- 항목이 다음 증가 된 db 값으로 데이터베이스에 삽입되지 않습니다.
두 번째 목표 (아무 문제 없음) 기존 인벤토리 데이터베이스에 항목을 삽입하려고
- 데이터베이스가 성공적으로 데이터베이스 (야호!)
항목을 업데이트 항목 ID 솔루션 시도 : 자동 증가를 트리거하려고 NULL을 사용하여 값 삽입
INSERT 대신 REPLACE 같은 소리를 사용하면 문제가 해결됩니다 (https://dev.mysql.com/doc/refman/5.7/en/replace.html) – TadejP
'itemid'는 (가) 고유합니까? –
@TadejP'REPLACE'는'INSERT ON DUPLICATE KEY UPDATE'와 동일한 유일성 기준을 필요로합니다. – Barmar