기존 Oracle 테이블에 ID 열을 추가하려면 어떻게해야합니까? 나는 오라클 11g를 사용하고 있습니다. 내가 DEGREE라는 테이블을 가지고 있다고 가정하고 그 테이블에 ID 컬럼을 추가하려고합니다.비어 있지 않은 oracle의 기존 테이블에 자동 증가 ID 추가
FYI 테이블이 비어 있지 않습니다.
기존 Oracle 테이블에 ID 열을 추가하려면 어떻게해야합니까? 나는 오라클 11g를 사용하고 있습니다. 내가 DEGREE라는 테이블을 가지고 있다고 가정하고 그 테이블에 ID 컬럼을 추가하려고합니다.비어 있지 않은 oracle의 기존 테이블에 자동 증가 ID 추가
FYI 테이블이 비어 있지 않습니다.
한 번에 수행 할 수 없습니다. 대신,
알터 (기본 키 제약 조건없이) 테이블과 열을 추가
ALTER TABLE DEGREE ADD (Ident NUMBER(10));
는 (널/고유하지 않은) 기본 키 제약 조건을 충족합니다 데이터로 새 열 채우기 예 같은
UPDATE DEGREE SET Ident=ROWNUM;
은 테이블을 변경하고 그 후
ALTER TABLE DEGREE MODIFY (Ident PRIMARY KEY);
자동으로 id 값을 설정하려면, 당신은 SEQUENCE
과 BEFORE INSERT
트리거를 설정할 수 있습니다 완료 칼럼에 제약 조건을 추가 새로운 기록을 위해.
(우리는 중복 ID를 원하지 않는)
alter table table_name add (id INTEGER);
테이블 + 1 또는 다른 안전한 값의 행 번호를 사용하여, start with
절을 순서 table_name_id_seq
을 만들 열을 추가 ;
update table_name set id = rownum; --or another logic
을 채우기 테이블 (NO 삽입)
alter table table_name lock exclusive mode;
을 잠 그려면 인터넷상의 예를 찾을 수 있습니다 (예 : this answer)
생성 트리거를 시작하면 잠금이 해제됩니다. (자동으로 커밋). 또한 id 열에 고유 제한 조건을 추가 할 수도 있습니다. 그렇게하는 것이 가장 좋습니다.
시퀀스는 디폴트 값 1 대신에 4 단계에서 설정 한 가장 높은 값과 일치하는 'start with'를 사용하여 생성해야합니다. 그렇지 않으면 처음에 새 행을 삽입 할 때 충돌이 발생합니다. 또한 PK로 만들거나 적어도 고유하게 만들 수도 있습니다. –
아참, 당신 말이 맞아, 나는 그 대답을 언급 할께. –
시퀀스는 '1'의 기본값이 아니라 'rownum'에서 수동으로 설정 한 가장 높은 값과 일치하는'start with '로 생성해야합니다. 그렇지 않으면 처음에 새 행을 삽입 할 때 제약 조건 위반이 발생합니다. –