https://stackoverflow.com/questions/9189102/too-many-auto-increments-with-on-duplicate-key-update
INSERT … ON DUPLICTE KEY UPDATE 는 굉장히 유용한 구문이나, 오늘 보니까 duplicate 여부를 확인하는 과정에서 쓸데없이 autoincrease를 걸어둔 primary key가 높아지는 것을 발견했다. 즉 1,2,3…잘가다가 갑자기 3만번대로 점프. DB architechure의 문제로 생각된다.
위 링크에 좋은 예제가 있어 남겨둔다. 트렌젝션을 이용해서
START TRANSACTION ; UPDATE pages SET etc = 'randomness' WHERE name = 'bob' ; INSERT INTO pages (name, etc) SELECT 'bob' AS name , 'randomness' AS etc FROM dual WHERE NOT EXISTS ( SELECT * FROM pages p WHERE p.name = 'bob' ) ; COMMIT ;
다음과 같이 하면 된다.
다만 궁금한 것은 등록되지 않은 상태에서 UPDATE 퀴리는 에러를 발생시키지 않으려나 하는 점이지만. 잘 된다는 댓글들을 봐서는 문제 없는 것 같다.