Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

제약 조건 2 본문

Oracle

제약 조건 2

붓그린 2017. 6. 16. 13:12
제약조건 이어서

primary key, unique key, not null, check -> 한테이블에 설정
foreign key -> 하나 이상의 테이블을 연결

Q1. 제약조건의 비활성을 위한 초기단계
테이블에 어떤 제약조건들이 있는지 확인하기

[ 데이터 딕셔너리(데이터 사전) ]
테이블 생성 -> DML -> 오라클의 특정 테이블에 저장(시스템 테이블)
1) user_XXX : 계정을 가진 자들이 조회 가능(user_constraints 테이블)
2) dba_XXX : 관리자만 조회 가능(일반 계정은 접근이 안됨)
3) all_XXX : 사용자와 관리자 모두 조회 가능


select * from user_constraints -> 필드 개수, 데이터를 알 수 없기에 양이 많을 경우 속도가 느림

새로운 테이블을 확인할 때 구조 먼저 확인하기
desc user_constraints

 이름 널? 유형
 ----------------------------------------- -------- ----------------------------
 OWNER VARCHAR2(30)
 CONSTRAINT_NAME(제약조건이름)         NOT NULL VARCHAR2(30)
 CONSTRAINT_TYPE(제약조건 종류)             VARCHAR2(1)
 TABLE_NAME(제약조건이 설정된 테이블 이름)    NOT NULL VARCHAR2(30)
 SEARCH_CONDITION             LONG
 R_OWNER                                VARCHAR2(30)
 R_CONSTRAINT_NAME               VARCHAR2(30)
 DELETE_RULE VARCHAR2(9)
 STATUS(제약조건 활성화 상태)           VARCHAR2(8)
 DEFERRABLE VARCHAR2(14)
 DEFERRED VARCHAR2(9)
 VALIDATED VARCHAR2(13)
 GENERATED VARCHAR2(14)
 BAD VARCHAR2(3)
 RELY VARCHAR2(4)
 LAST_CHANGE DATE
 INDEX_OWNER VARCHAR2(30)
 INDEX_NAME VARCHAR2(30)
 INVALID VARCHAR2(7)
 VIEW_RELATED VARCHAR2(14)



EX) 

select constraint_name, constraint_type, table_name, status
 from user_constraints
 where table_name=upper('&table_name');

table_name의 값을 입력하십시오: b_prtest
구 1: select constraint_name, constraint_type, table_name, status from user_co
where table_name=upper('&table_name')
신 1: select constraint_name, constraint_type, table_name, status from user_co
where table_name=upper('b_prtest')

CONSTRAINT_NAME C TABLE_NAME STATUS
------------------------------ - ------------------------------ --------
B_PRTEST_CK_AGE C B_PRTEST ENABLED
B_PRTEST_PK_ID P B_PRTEST ENABLED


enabled : 제약조건이 지금 작동중
disabled : 제약조건이 작동 off

*자주 쓰는 명령어는 저장하기(con_srch.txt)

table_name의 값을 입력하십시오: prtest
구 3: where table_name=upper('&table_name')
신 3: where table_name=upper('prtest')

선택된 레코드가 없습니다.
-> prtest테이블에는 현재 제약조건이 설정된 것이 없다는 의미




Q2. 제약조건 비활성화(임시 중지, 다시 가동 가능)
형식) alter table 수정테이블명 disable constraints 비활성화시킬 제약조건 이름
형식) alter table 수정테이블명 enable constraints 비활성화시킬 제약조건 이름 (활성화)

EX) 비활성화 하기


SQL> alter table b_prtest disable constraints b_prtest_ck_age;

테이블이 변경되었습니다.
SQL> @L:\2017NCS\1.db\print\con_srch.txt
table_name의 값을 입력하십시오: b_prtest
구 1: select constraint_name, constraint_type, table_name, status from user_constraints
where table_name=upper('&table_name')
신 1: select constraint_name, constraint_type, table_name, status from user_constraints
where table_name=upper('b_prtest')

CONSTRAINT_NAME C TABLE_NAME STATUS
------------------------------ - ------------------------------ --------
B_PRTEST_CK_AGE C B_PRTEST DISABLED
B_PRTEST_PK_ID P B_PRTEST ENABLED


EX2) 다시 활성화 하기

SQL> alter table b_prtest enable constraints b_prtest_ck_age;
테이블이 변경되었습니다.

SQL> @L:\2017NCS\1.db\print\con_srch.txt
table_name의 값을 입력하십시오: b_prtest
구 1: select constraint_name, constraint_type, table_name, status from user_constraints
where table_name=upper('&table_name')
신 1: select constraint_name, constraint_type, table_name, status from user_constraints
where table_name=upper('b_prtest')

CONSTRAINT_NAME C TABLE_NAME STATUS
------------------------------ - ------------------------------ --------
B_PRTEST_CK_AGE C B_PRTEST ENABLED
B_PRTEST_PK_ID P B_PRTEST ENABLED



foreign key 설정 참고사항
: 두 테이블 사이의 서로 관련이 있는 필드끼리 설정
1) 필드명이 같아도 되고 달라도 된다. ( default는 같게 설정한다.  두 필드가 연결되어있는지 헷갈리지 않는다.)
2) 두개의 연결된 필드는 자료형이 같아야 된다.(number->number)








'Oracle' 카테고리의 다른 글

서브쿼리  (0) 2017.06.16
조인 개요 및 작성법  (0) 2017.06.16
DDL, 테이블 제약조건  (0) 2017.06.09
그룹함수  (0) 2017.06.09
오라클의 함수 및 사용방법  (0) 2017.06.09
Comments