질문을 삭제하지 말아주세요.!
 
2
1
0

안녕하세요. 고민을 해보다가 도저히 답이 나오지 않아서 질문드립니다.

테이블 구성이 

id, name, tel, addr 이라는 컬럼이 있구요.

id는 auto increments 입니다. 

테이블에 아래와 같이 2가지 값을 입력을 했다고 하면요.

1, 홍길동, 010-1111-1111, 서울 반포구

2, 고길동, 010-2222-2222, 서울 논현구

여기서 2번을 삭제를 합니다. 2번을 삭제하고 새로운 값을 입력하면

1, 홍길동, 010-1111-1111, 서울 반포구 

3, 홍길순, 010-3333-333, 서울 서초구

이런식으로 남겠죠.  

제가 원하는건  2번을 지웠으면 다시 등록시 2번으로 id가 되는 방법을 알고 싶습니다.


  1. 김영준

    아래 안정수님이 답변 하신것처럼

    auto_incrememt 컬럼은 그냥 내부용 고유키로 사용하시고

    순번을 원하시는것은 max(순번컬럼)+1을 사용하시는게 좀더 손쉬운 방법입니다

    단점은 동시에 채번이 일어날경우 중복될수도 있다는 점

    필요에따라 잘 사용하시길

CommentAdd your comment...

3 answers

  1.  
    2
    1
    0

    강제로 alter table 을 해서 auto_increments number를 변경하는 방법을 찾아보시면 답을 얻으실 수 있겠습니다만, 

    이런방식은 auto_increments id를 변경하는 것은 데이터가 꼬일 수 있는 지름길입니다. 


    따라서 정말 특수한 케이스가 아닌이상 절대로!!!, 권장드리지 않습니다. 


    일단 질문하신 auto_increments id 를 재설정 해야 하는 배경을 좀 더 설명해주시면 좋을 것 같구요.


    회원을 저장하는 용도의 테이블을 구성하시는 것 같은데, 회원 id 가 변경되면 안되는 이유가 있는지 

    잘생각해 보시길 바랍니다.


    만약 회원id 2 번을 삭제해야 한다면, soft_delete 만 하고 사용은 불가능 하도록 하는게

    일반적인 대응 방법이라고 생각됩니다. 

    1. 안정수

      적당한 예가 될지 모르겠지만, 

      어떤 대학생이 입학해서 새로운 학생증을 부여받을 때 학번이 기록된다고 생각하면 ex) 학번 20171234


      입학 초기에 자기 앞번호의 학번을 가진 학생이 (학번 20171233) 자퇴한다고 해서 20171234 학생이 20171233 번으로 학번이 변경되지는 않겠죠. 


      만약 그렇게 되면 이전에 기록된 다양한 전산시스템에서 오동작 확율이 많을테니까요. 


      꼭 ID 를 다시 구성해야 되는지 잘 생각해보시고, 특수하게 순차적으로 번호를 별도로 지정해야 된다면 다른 컬럼을 사용하시는게 알맞아 보입니다. 

    CommentAdd your comment...
  2.  
    3
    2
    1

    일단 답변은, 된다는걸로 참고만 하세요. 가이드는 위에 잘 말씀해 주셨으니 다른 방법을 찾아보시면 좋겠네요.

    ALTER TABLE tbl AUTO_INCREMENT = 5;

    참고로 삭제 행위를 하지 않더라도 중간에 끊길 수 있습니다. (아주 동시에 삽입하거나, 트랜젝션 중 최종적으로 롤백 한다던가 여러가지가 있음) 자동 증가값은 사용자에게 표현해주기 위한 용도가 아님을 상기해 주세요.





    http://stackoverflow.com/questions/970597/change-auto-increment-starting-number

    1. 조은걸

      네 참고하겠습니다.^^ 감사합니다.

    CommentAdd your comment...
  3.  
    1
    0
    -1

    답변 감사드립니다. 제가 원했던건 목록으로 출력을 하는데, id도 동시에 출력을 해버리면,

    12,4중간에 번호가 끊기는게 어색해서 방법을 찾던 중이였습니다.

    출력용 id 컬럼을 따로 만들어야 할거 같네요.

    다시한번 감사드립니다.^^

    1. taelkim

      혹시 어드민같은데서 고유값이 아니라 100개 중에 몇번째인지 등의 용도로 쓴다면 id를 쓰지않고 select 결과에 index를 동적으로 생성해주는것이 좋습니다.

      (엑셀친화적인 UI를 제공한다던가...)

    2. 조은걸

      그런 방법도 있겠네요. 참고 할께요~감사합니다.ㅎ

    CommentAdd your comment...