Oracle 메 인 키 및 제약 조건
5480 단어 OracleprimaryOracle 기본 개념
홈 키 추가 문
alter table table_name add constraint cons_name primary key(col_name);
홈 키 가 생 성 되 었 는 지 확인 합 니 다
select dbms_metadata.get_ddl('OBJECT_TYPE','NAME','SCHEMA') from dual;
OBJECT_TYPE (TABLE,PARTITION,INDEX......)
NAME (OBJECT_NAME)
SCHEMA (INSTANCE)
object 표 에 해당 하 는 내용:
select object_type,object_name,owner from dba_objects
가 져 온 DDL 문 구 는 CUSTTEL 에 있 는 홈 키 열 을 만 들 었 음 을 표시 합 니 다.
CREATE TABLE "NEWCCS"."USERLEVELBYTEL_BAK"
( "CUSTTEL" VARCHAR2(20),
"USERLEVEL" NUMBER(*,0) NOT NULL ENABLE,
"CUSTID" VARCHAR2(20)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ;
ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" MODIFY ("USERLEVEL" NOT NULL ENABLE);
홈 키 를 만 든 후 이 표 에 유일한 색인 과 홈 키 필드 가 추가 되 었 습 니 다.
CREATE TABLE "NEWCCS"."USERLEVELBYTEL_BAK"
( "CUSTTEL" VARCHAR2(20),
"USERLEVEL" NUMBER(*,0) NOT NULL ENABLE,
"CUSTID" VARCHAR2(20),
CONSTRAINT "PK_PRIMARY" PRIMARY KEY ("CUSTTEL")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ;
CREATE UNIQUE INDEX "NEWCCS"."PK_PRIMARY" ON "NEWCCS"."USERLEVELBYTEL_BAK" ("CUSTTEL")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ;
ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" ADD CONSTRAINT "PK_PRIMARY" PRIMARY KEY ("CUSTTEL")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ENABLE;
ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" MODIFY ("USERLEVEL" NOT NULL ENABLE);
인증:
테이블 에 데이터 insert 를 userlevelbytel values ('10010', '3', ') 에 반복 해서 삽입 합 니 다.
다음 오류 알림 이 나타 납 니 다 (유일한 제약 오류):
ORA-00001: unique constraint (NEWCCS.PK_PRIMARY) violated
userlevelbytel 값 에 빈 값 insert 삽입 (',' 3 ',');
다음 오류 알림 이 나타 납 니 다 (유일한 제약 오류):
ORA-01400: cannot insert NULL into ("NEWCCS"."USERLEVELBYTEL_BAK"."CUSTTEL")
유일한 구속 대비 차 이 를 단독으로 추가 합 니 다.
이 테이블 의 홈 키 삭제:
alter table userlevelbytel_bak drop constraint pk_primary;
CREATE TABLE "NEWCCS"."USERLEVELBYTEL_BAK"
( "CUSTTEL" VARCHAR2(20),
"USERLEVEL" NUMBER(*,0) NOT NULL ENABLE,
"CUSTID" VARCHAR2(20),
CONSTRAINT "UNIQUE_CUSTTEL" UNIQUE ("CUSTTEL")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ;
CREATE UNIQUE INDEX "NEWCCS"."UNIQUE_CUSTTEL" ON "NEWCCS"."USERLEVELBYTEL_BAK" ("CUSTTEL")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ;
ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" MODIFY ("USERLEVEL" NOT NULL ENABLE);
ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" ADD CONSTRAINT "UNIQUE_CUSTTEL" UNIQUE ("CUSTTEL")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "NEWCCS" ENABLE;
유일한 제약 이 생 성 되 는 것 을 볼 수 있 습 니 다.
테스트:
비 어 있 는 기록 반복 삽입:
ORA-00001: unique constraint (NEWCCS.UNIQUE_CUSTTEL) violated
빈 기록 반복 삽입:
select * from userlevelbytel_bak where custtel is null;
검색 결 과 는 여러 개의 중 복 된 빈 기록 입 니 다.
이 를 통 해 알 수 있 듯 이 유일한 제약 은 비 어 있 는 값 만 제약 하고 Oracle 에서 NULL 값 은 비교 할 수 없 기 때문에 반복 적 으로 삽입 하 더 라 도 유일한 제약 은 제한 할 수 없 지만 조합 제약 조건 에서 예 를 들 어 (A, B, NULL) 는 비교 할 수 있다.
예:
alter table userlevelbytel_bak add constraint unique_custtel unique(custtel,userlevel);
빈 기록 반복 삽입:
ORA-00001: unique constraint (NEWCCS.UNIQUE_CUSTTEL) violated
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Oracle 생성 향후 3일간의 전체 시점 (단계 상세)수요: X 좌표축 시간은 모두 정시 시간으로 앞으로 3일 동안의 예측을 보여준다(x 축은 앞으로 3일 동안의 정시 시간을 보여준다), 3시간마다 한 눈금, 가로 좌표는 모두 24개의 눈금을 보여준다 1단계: 현재 시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.