2014-04-16 2 views

답변

3

한 번에 수행 할 수 없습니다. 대신,

  • 알터 (기본 키 제약 조건없이) 테이블과 열을 추가

    ALTER TABLE DEGREE ADD (Ident NUMBER(10)); 
    
  • 는 (널/고유하지 않은) 기본 키 제약 조건을 충족합니다 데이터로 새 열 채우기 예 같은

    UPDATE DEGREE SET Ident=ROWNUM; 
    
  • 은 테이블을 변경하고 그 후

    ALTER TABLE DEGREE MODIFY (Ident PRIMARY KEY); 
    

자동으로 id 값을 설정하려면, 당신은 SEQUENCEBEFORE INSERT 트리거를 설정할 수 있습니다 완료 칼럼에 제약 조건을 추가 새로운 기록을 위해.

+0

시퀀스는 '1'의 기본값이 아니라 'rownum'에서 수동으로 설정 한 가장 높은 값과 일치하는'start with '로 생성해야합니다. 그렇지 않으면 처음에 새 행을 삽입 할 때 제약 조건 위반이 발생합니다. –

2
  1. (우리는 중복 ID를 원하지 않는)

    alter table table_name add (id INTEGER);

  2. 테이블 + 1 또는 다른 안전한 값의 행 번호를 사용하여, start with 절을 순서 table_name_id_seq을 만들 열을 추가 ;

  3. 은 (보기 자동 시퀀스를 사용하여 삽입에 ID를 넣어 트리거를 추가를 열

    update table_name set id = rownum; --or another logic

  4. 을 채우기 테이블 (NO 삽입)

    alter table table_name lock exclusive mode;

  5. 을 잠 그려면 인터넷상의 예를 찾을 수 있습니다 (예 : this answer)

생성 트리거를 시작하면 잠금이 해제됩니다. (자동으로 커밋). 또한 id 열에 고유 제한 조건을 추가 할 수도 있습니다. 그렇게하는 것이 가장 좋습니다.

+0

시퀀스는 디폴트 값 1 대신에 4 단계에서 설정 한 가장 높은 값과 일치하는 'start with'를 사용하여 생성해야합니다. 그렇지 않으면 처음에 새 행을 삽입 할 때 충돌이 발생합니다. 또한 PK로 만들거나 적어도 고유하게 만들 수도 있습니다. –

+0

아참, 당신 말이 맞아, 나는 그 대답을 언급 할께. –