constraint: 무결성을 위해
- 종류: pk,fk,not null, unique,check
- 제약조건 방식 2가지
1) column level 방식: 칼럼명에 이어서
2) table level 방식: 제약조건을 마지막에 모아서
제약조건 중 not null 은 무조건 column level 방식
- 사용법:
constraint 제약조건이름(테이블명_칼럼명_제약조건약어) 제약조건종류 (이름이 있어야지 나중에 dictionary에서 찾을 수 있음)
- column level 방식
CREATE TABLE memtable (
memname VARCHAR2(20) CONSTRAINT memtable_memname_pk PRIMARY KEY,
memtel VARCHAR2(20) CONSTRAINT memtable_memtel_uk UNIQUE,
memhobby VARCHAR2(30) CONSTRAINT memtable_memhobby_nn NOT NULL,
membi NUMBER(5) CONSTRAINT memtable_membi_ck CHECK(membi>=1000), --membi는 1000이상의 값만 입력 가능
memid NUMBER(6) CONSTRAINT memtable_memid_fk REFERENCES memidtable(memid)
);
CREATE TABLE memidtable (
memid NUMBER(6) CONSTRAINT memidtable_memid_pk PRIMARY KEY,
memname VARCHAR2(20)
);
INSERT INTO memidtable VALUES(1, '홍길동');
INSERT INTO memidtable VALUES(2, '홍길말');
commit;
INSERT INTO memtable(memid,memtel,memhobby,memname) VALUES (5,'010-1234-1234','없어','손흥민');
-- 5번은 없어서 안됨, 외래키 제약조건 위배
- table level 방식:
CREATE TABLE memtable2 (
memname VARCHAR2(20),
memtel VARCHAR2(20),
memhobby VARCHAR2(30) CONSTRAINT memtable2_memhobby_nn NOT NULL,
membi NUMBER(5),
memid NUMBER(6),
CONSTRAINT memtable2_memname_pk PRIMARY KEY(memname),
CONSTRAINT memtable2_memtel_uk UNIQUE(memtel),
CONSTRAINT memtable2_membi_ck CHECK(membi>1000),
CONSTRAINT memtable2_memid_fk FOREIGN KEY(memid) REFERENCES memidtable(memid)
);
- 제약조건 확인 방법:
SELECT constraint_name, constraint_type, search_condition, r_constraint_name
FROM user_constraints
WHERE table_name='MEMTABLE';
Q) 주어진 테이블에 table-level방식의 제약조건을 넣어 전체 테이블을 완성하시오
<제약조건>
1. name은 기본키로 만든다
2. tel 은 null을 제외하면 같은 번호가 있으면 안된다
3. hobby 는 null 이 되면 안된다
4. dept_id는 dept_table의 기본키 d_id를 참조한다
CREATE TABLE memtable2 (
name VARCHAR2(20),
tel VARCHAR2(20),
hobby VARCHAR2(30) CONSTRAINT memtable2_hobby_nn NOT NULL,
dept_id NUMBER(5),
CONSTRAINT memtable2_name_pk PRIMARY KEY(name),
CONSTRAINT memtable2_tel_uk UNIQUE(tel),
CONSTRAINT memtable2_dept_id_fk FOREIGN KEY(dept_id) REFERENCE dept_table(d_id)
);
'[오라클] > SQL' 카테고리의 다른 글
sequence, index (0) | 2020.12.26 |
---|---|
view (0) | 2020.12.26 |
decode (0) | 2020.12.26 |
dictionary (0) | 2020.12.26 |
SAVEPOINT (0) | 2020.12.26 |