SQL 에서 중간에 있는 데이터를 delete로 삭제 시 그에 맞춰 전체 기본키도 함께 정렬하고 싶습니다.

조회수 714회

안녕하세요. 코딩 왕초보 입니다.

데이터베이스를 공부하고 있는 중에 SQL 구문으로 중간에 있는 값을 삭제 하였을 때 기본키도 알아서 정렬이 될 줄 알았는데 기본키는 이전에 있는 값 그대로 유지 되더라고요.

예를 들어서 데이터들 기본키가 각각 1,2,3,4,5,6 인 상태에서 3번 데이터를 delete 구문으로 삭제하니 남아있는 데이터의 기본키가 1,2,4,5,6인 상태로 남아있습니다.

이 기본키를 자동으로 1,2,3,4,5 처럼 순서대로 정렬하고 싶은데 인터넷에 검색해도 딱히 방법이 나오지 않아서 질문드립니다.

만약 이런 경우라면 데이터 삭제 후 다시 전체 데이터를 로드해서 기본키를 처음부터 다시 재정렬하는 것 이외에는 방법이 없을까요?

답변해 주시면 감사드리겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 네. 어떤 이유에서 재정렬이 필요하신지는 모르겠지만 PK키는 유일한 값이기 때문에 변경될 수 있는 경우가 없어야합니다.

  • 일단, 기본키를 바꿀 수 있다고 생각하시면 안됩니다. 데이터베이스의 차원에서, 3번 데이터는 인류 역사상 단 한 개만 존재해야/존재했어야 하며 단 한 번만 생성될 수 있고 단 한 번만 삭제될 수 있습니다. 그게 안 되면 뭐가 3번 데이터였는지 그런 게 있긴 했는지 등에 관한 역사 왜곡이 발생합니다. 유일성, 최소성 등의 개념을 반드시 숙지하세요.

    아무튼, 하고 싶으신 건 결국 기본키 오름차순 정렬한 것에 순번을 매기는 작업일 텐데요 그건 기본키와 별 관계 없는 좀 다른 개념입니다. MySQL이라면 이런 식으로 하시면 됩니다.

    SELECT
        (@row_number := @row_number + 1) AS rnum,
        t.PK, foo, t.bar
    FROM table t,
    (SELECT @row_number := 0) as X
    ORDER BY t.PK
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)