일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ID중복
- ObjectInputStream
- 리눅스세팅
- interrupted()
- 아이디중복
- interrupt()
- include지시자
- Daemon()
- 동기화
- first-of-child
- Linux세팅
- 상관 서브 쿼리
- Linux셋팅
- isinterrupted()
- char[] String 형변환
- MemoryStream
- sleep()메소드
- ThreadGroup()
- 스레드그룸
- include 지시자
- String char[] 형변환
- first-child
- 상관서브쿼리
- InputDialog
- StringWriter
- 리눅스셋팅
- StringReader
- 표현 언어
- include액션태그
- 메모리스트림
- Today
- Total
다연이네
[days09] 제약조건 본문
제약조건
- 테이블에 부여된 제약조건의 관계키는 user_constraints 뷰를 사용하여 확인할 수 있다.
- user_constraints View : 제약조건 확인
- from 테이블명 또는 뷰명
1) 제약조건을 사용하는 이유 ?
data integrity(데이터 무결성)을 위해
데이터 무결성이 뭔데 ?
ㄱ) 개체 무결성(Entity Integrity)
-- 릴레이션(=테이블)에 저장되는 튜플(=레코드,행)의 유일성을 보장
-- 속성은 칼럼
ㄴ) 참조 무결성(Relational Integrity)
-- 릴레이션 간의 데이터의 일관성을 보장하기 위한 제약조건이다.
-- 즉, 하나의 릴레이션에 있는 속성 값이 다른 릴레이션에 있는 속성 값을 참조하기 위해서는
참조되는 속성 값이 반드시 해당 릴레이션에 존재해야 한다.
-- ex) 50번 부서 사원 추가
ㄷ) 도메인 무결성(domain integrity)
-- 속성에서 허용 가능한 값의 범위를 지정하기 위한 제약조건이다.
2. 제약조건 용도
ㄱ. 주로 테이블에 행(row)을 입력, 수정, 삭제할 때 적용되는 규칙으로 사용되며
kor number(3), 0/111/999 0~100정수 규칙을 정할 수 있다.
ㄴ. 테이블에 의해 참조되고 있는 경우 테이블의 삭제 방지를 위해서도 사용된다.
3. 제약조건을 설정하는 방법
ㄱ. 테이블 레벨 - OUT-OF-LINE constraint 방법
create table tbl_test(
seq number
,writer varchar2(20)
,passwd varchar2(15)
,title varchar2(100)
,content long
,regdate date default sysdate
,제약조건
,제약조건
,제약조건
,등등
);
- 복합키 설정할때는 꼭 테이블레벨 방식을 사용해야 한다. ( * 복합키primary key(seq, writer) )
1. 테이블 레벨 방식으로 제약조건 설정
create table tbl_columnlevel
(
seq number not null
,id varchar(20) not null
,email varchar(50) not null
,score number(3)
,deptno number(2)
,city varchar2(50)
--테이블 레벨 방식
,constraint tbl_columnlevel_seq_PK primary key(seq) --괄호 필수
,constraint tbl_columnlevel_id_UK unique(id)
,constraint tbl_columnlevel_email_UK unique(email)
,constraint tbl_columnlevel_score_CK check(score between 0 and 100)
,constraint tbl_columnlevel_city_CK check(city in('서울','부산'))
,constraint tbl_columnlevel_deptno_FK foreign key(deptno) references dept(deptno)
);
ㄴ. 컬럼 레벨 - IN-LINE constraint 방법
create table tbl_test(
seq number NOT NULL
,writer varchar2(20) NOT NULL
,passwd varchar2(15) NOT NULL
,title varchar2(100) NOT NULL
,content long
,regdate date default sysdate
);
- not null 제약조건은 컬럼레벨 방식으로만 선언 가능하다.
컬럼 레벨일 경우에 제약조건을 설정하는 방법
- 컬럼명 자료형 constraint 제약조건명(테이블명_컬럼명_PK)
- seq number primary key constraint tbl_test_seq_PK primary key
- 사용자는 무결성 제약조건의 이름을 지정할 수 있으며 지정하지 않으면 SYS_Cn 형태로 자동적으로 생성된다.
- [constraint tbl_test_seq_PK] -> SYS_???이런식으로 이름 부여
2. 컬럼 레벨 방식으로 제약조건 설정
create table tbl_columnlevel
(
seq number not null constraint tbl_columnlevel_seq_PK primary key --pk
,id vatchar(20) not null constraint tbl_columnlevel_id_UK unique--uk
,email varchar(50)not null constraint tbl_columnlevel_email_UK unique --uk
,score number(3) not null constraint tbl_columnlevel_score_CK check(score between 0 and 100)--0~100 ck
,deptno number(2)not null constraint tbl_columnlevel_deptno_FK foreign key --fk dept 테이블의 deptno 컬럼
,city varchar2(50) not null constraint tbl_columnlevel_city_CK check(city in('서울','부산'))
);
PRIMARY KEY, UNIQUE와 같은 제약조건은 자동으로 UNIQUE INDEX가 생성된다
4. 제약조건 종류
ㄱ. PK(primary key) : 기본키, nullX, 중복X, = NN+UK
ㄴ. FK(foreign key) : 부모PK참조, null
ㄷ. UK(unique key) : 유일성 - 주민번호, ID, 전화번호 컬럼
ㄹ. NN(not null) : 필수입력사항
ㅁ. CK(check) : 해당컬럼에 저장 가능한 값의 범위나 조건 지정
--kor between 0 and 100
--city in ('서울','경기','인천')
3. 기존에 존재하는 테이블에 제약조건 추가 PK/CK2/UK/FK 추가
create table tbl_columnlevel
(
seq number not null
,id varchar(20) not null
,email varchar(50) not null
,score number(3)
,deptno number(2)
,city varchar2(50)
);
alter table tbl_columnlevel
add (constraint tbl_columnlevel_seq_PK primary key(seq)
,constraint tbl_columnlevel_id_UK unique(id)
,constraint tbl_columnlevel_email_UK unique(email)
,constraint tbl_columnlevel_score_CK check(score between 0 and 100)
,constraint tbl_columnlevel_city_CK check(city in('서울','부산'))
,constraint tbl_columnlevel_deptno_FK foreign key(deptno) references dept(deptno)
);
5. 제약조건 삭제
alter table TBL_COLUMNLEVEL
drop constraint SYS_C007115;
'Oracle' 카테고리의 다른 글
[days10] join 사용하기 + SELF JOIN (0) | 2020.11.11 |
---|---|
[days09] 복합키 / JOIN (0) | 2020.11.10 |
[days08] merge문 (통합, 병합) (0) | 2020.11.09 |
[days08] 한번에 여러 데이터 insert하기 / 다중 insert 문 (0) | 2020.11.09 |
[days08] any, some 연산자 (0) | 2020.11.09 |