[오라클]/SQL

제약조건

broship 2020. 12. 26. 13:24

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