시퀀스 및 트리거를 사용하여 Oracle 내 테이블에서 자동 증가를 구현했습니다. 처음 두 개의 레코드가 연속 된 순서로 ID를 가졌지 만 세 번째 레코드의 항목에는 갭이있었습니다. ID는 8이었습니다. 레코드를 삭제하고 새 레코드를 입력 할 때 ID는 9가되었습니다. 어떻게 갭을 제거하고 3 번째 레코드의 ID를 3으로하고 다음에 대해 연속 된 순서로 얻습니까? 행을 삭제하면 새 행이 새 시퀀스로 시작하거나 삭제 된 시퀀스에서 계속 진행됩니까? 이 문제를 어떻게 해결합니까? 도와주세요ID 용 Oracle10g의 자동 증가에서 행이 삭제되면 새 행이 새 시퀀스로 시작하거나 삭제 된 시퀀스에서 계속됩니다.
0
A
답변
2
시퀀스의 간격은 결코 재사용되지 않습니다. 어쨌든 캐싱, 롤백, RAC 등으로 인해 삭제하지 않고도 갭을 예상해야합니다. RAC를 사용하는 경우 기대하는 순서대로 시퀀스를 얻지 못할 수도 있습니다. ID, 특히 '자동 증가'ID는 일반적으로 합성 기본 키이며 키의 실제 값은 본질적인 의미가 없으며 고유해야합니다.
Tom Kyte has a view on this subject 물론.
간격을 다시 사용하면 ID가 1, 2 및 3 인 레코드 세 개를 추가 한 다음 레코드 2를 삭제하면 어떻게됩니까? 다음에 삽입 된 레코드가 ID 2 또는 4를 얻습니까? 격차를 메우고 (시퀀스를 무시하고 시퀀스를 기본적으로 무시하는 경우라도) ID가 삽입 된 순서대로 있지 않으므로 ID를보고도 식별 할 수 없습니다. ID에서 삽입 된 순서를 알지 못합니다.
당신이 정말로 표시 목적으로 원활한 번호를 원하는 경우에 당신은 ID 값을 무시할 수와 의사 열 사용 : 당신은 그들이 다음 삽입 된 타임 스탬프 필드를 추가하고 설정 한 주문을 추적해야하는 경우
select t.column1, t.column2, ...,
row_number() over (order by t.id) as rn
from your_table t;
을 당신의 방아쇠에 또한 sys_timestamp
에. 다음 순서로 연속 번호를 생성 할 수 있습니다.
select t.column1, t.column2, ...,
row_number() over (order by t.inserted) as rn
from your_table t;
관련 문제
- 1. 행이 삭제되면 Forloop의 rowcount가 업데이트되지 않습니다.
- 2. 새 행이 데이터베이스에 삽입되지 않았습니다.
- 3. Listview 행이 새 값으로 증가합니다
- 4. 데이터 집합에 새 행이 변경되었습니다.
- 5. jQuery에서 모든 행이 삭제되었을 때 새 행이 추가되지 않습니다.
- 6. 삭제 행이
- 7. 행이 삭제되면 버튼이 맞춤 섹션 헤더보기에 추가됩니다.
- 8. 삭제 된 행이 계속 돌아옵니다.
- 9. 삭제 된 행이 다시 나타납니다
- 10. 방지 엑셀 행이 삭제 화학식에서 삭제 기준에서
- 11. 문제 삭제 행이 MySQL의
- 12. 삭제 행이 한번에 하나씩
- 13. WPF DataGrid - 새 항목의 행이 표시되지 않습니다.
- 14. ASP.net DataTable에 새 행이 저장되지 않습니다.
- 15. 새 DataRow를 추가해도 DataGridView에 행이 추가되지 않는다
- 16. DataGridView에서 콤보 상자를 선택하면 새 행이 추가됩니다.
- 17. DataGrid에 새 항목의 행이 표시되지 않습니다.
- 18. DataGridView에 새 행이 추가되었는지 확인하십시오. 그렇다면 새 행 모음을 얻으십시오.
- 19. 행이 삭제 된 후 MySQL rearange 자동 증가
- 20. 버튼을 클릭하면 새 행이 추가 된 표가 새로 고침니다.
- 21. 새 행이 동일한 테이블에 삽입 된 후 오류 업데이트 트리거
- 22. 위 섹션에서 행이 삭제되면 섹션 아래의 머리글이 복제됩니다.
- 23. UITableViewCell을 삭제 한 후 빈 행이 나타납니다.
- 24. 행이
- 25. 행이 스 와이프 된 경우에만 UITableView에서 삭제 단추 제거
- 26. 자바 스크립트에서 모달을 닫은 후 테이블의 새 행이 추가되지 않습니다.
- 27. 열의 사용자 크기 조정을 존중 JTable의 - 새 행이
- 28. 새 행의 데이터를 입력하기 전에 행이 완전히 완료되었는지 확인하십시오.
- 29. 새 행이 추가되었을 때 DataGridview를 새로 고치는 방법
- 30. ColdFusion에서 만든 텍스트 파일에 새 행이 표시되지 않습니다.