티스토리 뷰

반응형

오늘 쿼리를 작성하다가 auto_increment값을 다른 컬럼에 복사해서 insert해야하는 상황이 있었다. 

auto_increment 값은 INSERT후 완료된 값으로 나중에 복사할 컬럼에 그값을 넣기위해 UPDATE 쿼리를 작성해서 날리면 되긴 하는데

뭔가 INSERT 쿼리에 한번에 할수 있는 방법이 있을것 같아서 구글 신에게 물어봤더니 역시나 방법이 있었다. 


첫번째 방법

SELECT AUTO_INCREMENT

FROM information_schema.tables

WHERE table_name = 'table name'

AND table_schema = DATABASE( ) ;

두번째 방법

LAST_INSERT_ID() 

가장 최근에 INSERT시에 입력된 INCREMENT ID값을 가져올 수 있다.

중간에 다른 사용자에 의해 글이 추가되더라도 내가 작성할때 부여된 INCREMENT값이 나온다.
단, 당연하겠지만 같은 커넥션 안에서만 정상적인 결과가 나온다.

단, LAST_INSERT_ID() 는 tagle을 사용할수 없다고 한다. 


나는 두번째 방법으로 insert시 AUTO_INCREMENT값과 동일한 값이 들어가야할 컬럼에 해당 값을 넣어줄수 있었다. 

첫번째 방법은 AUTO_INCREMENT값이 정상적으로 반영이 안될경우가 있다. 

혹시나 멀티세션으로 자동증가값이 다른값으로 등록되는 일이 있을수도 있을까봐 찾아봤는데 mySQL 문서에 해당쿼리 사용함에 있어서 별도의 락을 걸거나 할 필요가 없다는 설명이 있다. 그냥 사용해도 된다고 한다.

The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions





반응형
댓글