2009-07-30 2 views
15

누군가가 그 오라클이 기본 키에 대한 자동 증가 기능을 지원하지 않는 이유를 설명 할 수 있습니까?oracle에 기본 키에 대한 자동 증가 기능이없는 이유는 무엇입니까?

시퀀스 및 트리거의 도움으로 동일한 기능을 얻을 수 있지만, 오라클이 내부적으로 시퀀스 및 트리거를 생성하는 autoincrement 키워드를 도입하지 않은 이유는 알고 있습니다. 나는 오라클에있는 사람들이 이것에 대해 확실히 생각했을 것이다. 이 기능을 제공하지 않은 이유가 있어야합니다. 이견있는 사람?

답변

15

이것은 단지 용어 일 수 있습니다. 'AUTOINCREMENT'는 레코드 '103'이 레코드 '102'와 '104'사이에 생성됨을 의미합니다. 클러스터 된 환경에서는 시퀀스의 경우가 반드시 그런 것은 아닙니다. 하나의 노드는 '100', '101', '102'를 삽입 할 수 있으며 다른 노드는 '110', '111', '112'를 삽입하므로 레코드가 '순서가 맞지 않습니다. 물론 '시퀀스'라는 용어의 의미는 같습니다.

시퀀스 모델을 따르지 않기로 선택하면 잠금 및 직렬화 문제가 발생합니다. 다음 값이 무엇인지 결정하기 전에 인서트가 다른 인서트의 커밋/롤백을 기다리도록 강요합니까? 아니면 트랜잭션이 롤백되면 키에 간격이 생기는 것을 받아들입니까?

누군가가 해당 필드에 특정 값을 가진 행을 삽입하려는 경우 (즉, 허용되었거나 기본처럼 작동하는지) 다른 사람이 해당 필드를 업데이트하려고하는 경우 수행 할 작업에 대한 문제가 있습니다 . 누군가 '101'을 삽입하면 자동 증가가 '102'로 점프합니까? 아니면 중복 값을 시도 할 위험이 있습니까?

IMP 유틸리티와 직접 경로 쓰기 및 하위 호환성에 영향을 미칠 수 있습니다.

나는 그것을 할 수 없다는 말은 아닙니다. 그러나 결국 누군가가 그것을 보았고 그들이 다른 곳에서 더 나은 개발 시간을 보낼 수 있다고 판단했습니다.


편집 추가 : 오라클 12.1에서

는 IDENTITY 열에 대한 지원이 추가되었습니다.

"식별 열에는 각 후속 INSERT 문에 대한 시퀀스 생성기에서 증가 또는 감소하는 정수 값이 할당됩니다.이 시퀀스 생성기를 구성하려면 identity_options 절을 사용할 수 있습니다."

https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#CJAHJHJC

5

sequences이 있기 때문에 모든 사항을 자동 증가시킬 수 있습니다.

+0

깨진 링크 : 17-06-2014 – guisantogui

+1

업데이트 됨 -주의 해 주셔서 감사합니다. –

1

많은 사람들이이 문제에 대해 불만을 나타 냈지만 일반적으로 응답은 시퀀스와 트리거로 충분히 쉽게 만들 수 있다는 것입니다.

5

이것은 다양한 DB 캠프 사이에서 꽤 오랫동안 논쟁 거리가되어 왔습니다. 데이터베이스 시스템이 세련되고 오라클로서 잘 구축되어 있기 때문에이 공통적으로 사용되는 중요한 기능을 사용하려면 많은 코드와 노력이 필요합니다.

나는 당신의 툴킷에 일종의 증분 프라이 머리 키 빌더/기능/툴을 넣고 오라클 작업에 편리하게 사용할 것을 권장합니다. 하원 의원에게이 기능을 GUI에서 사용 가능하게하거나 SQL의 한 줄을 사용하는 것이 얼마나 나쁜지 말해주십시오!

+0

사실, 오라클은 실제로 당신이 찾고있는 시퀀스의 개념을 가지고 있습니다. –

+4

그러나 자동 증가 외에도 기본 키 측면을 추가해야합니다. MS-SQL을 사용하면 하나의 명령문 (또는 몇 번의 마우스 클릭)으로이 두 가지를 모두 수행 할 수 있습니다. 내 요점은 MS - SQL에서 더 쉽습니다. – ajh1138

-1

시퀀스는 (사람이 순서를 업데이트하지 않고 데이터베이스에 수동으로 기록을 삽입) 쉽게 동기화 얻을 수 있습니다.오라클은 이미 오래 전에 구현해야했습니다! 시퀀스는 사용하기 쉽지만 자동 증가만큼 쉽지는 않습니다 (추가 코딩 비트 필요).