본문 바로가기
Language/SQL (SEQUEL)

SQL - DDL (Data Definition Language) 데이터 정의어 , 시퀀스, 제약 조건

by javapp 자바앱 2022. 3. 17.
728x90

시퀀스

데이터 값 자동으로 증가

 

테이블 구조만 생성

CREATE TABLE dept_sequence
AS
SELECT * FROM dept
WHERE 1<>1;

 

 

CREATE SEQUENCE

CREATE SEQUENCE seq_dept_sequence
INCREMENT BY 10  -- 증가값
START WITH 10 -- 시작값
MAXVALUE 90 -- 최대값
MINVALUE 0 --최소값
NOCYCLE -- 순환 여부 \ CYCLE
CACHE 2; -- 시퀀스 미리 만들어 두는 수 \ NOCACHE

 

 

여기서 데이터 추가

이때 deptno 컬럼에는 'seq_dept_sequence.NEXTVAL' 시퀀스를 준다.

INSERT INTO dept_sequence (deptno,dname, loc)
VALUES(seq_dept_sequence.NEXTVAL, 'DATABASE','SEOUL');

INSERT INTO dept_sequence (deptno,dname, loc)
VALUES(seq_dept_sequence.NEXTVAL, 'DATABASE','SEOUL');

 

SELECT * FROM dept_sequence;

시퀀스 설정에 따라 deptno 가 증가한다.

 

 

 

 


 

ALTER SEQUENCE

시퀀스 수정

ALTER SEQUENCE seq_dept_sequence
INCREMENT BY 20
CYCLE;

 

INSERT INTO dept_sequence (deptno,dname, loc)
VALUES(seq_dept_sequence.NEXTVAL, 'DATABASE','SEOUL');

변경 후 20씩 증가하는 것을 볼 수 있다.

 

 


 

DROP SEQUENCE

시퀀스 삭제

DROP SEQUENCE seq_dept_sequence;

DROP TABLE dept_sequence; -- 테이블 삭제

 

 

 


 

 

제약 조건

데이터베이스에 제약 조건을 설정하여 무결성 유지

장점 : 통합 관리 가능, 간단한 선언으로 구현 가능, 변경 용이, 오류 데이터 발생 방지

단점 : 복잡한 제약 조건의 구현과 예외 처리가 불가능

 

제약 조건 생성

CREATE TABLE table_pk2(
    login_id VARCHAR(20) CONSTRAINT table_pk2_pk PRIMARY KEY,
    login_pwd VARCHAR2(20) NOT NULL,
    tel VARCHAR(20)
    );

login_id VARCHAR(20) CONSTRAINT table_pk2_pk PRIMARY KEY  :  기본키 제약 조건

 

 

 

외래키 제약 조건 생성

-- 외래키 --
CREATE TABLE dept_pk(
    deptno NUMBER(2) CONSTRAINT deptpk_deptno_pk PRIMARY KEY,
    dname VARCHAR2(14),
    loc VARCHAR(20)
);
CREATE TABLE emp_fk(
    empno NUMBER(4) CONSTRAINT empfk_empno_pk PRIMARY KEY,
    ename VARCHAR(20),
    JOB VARCHAR(20),
    deptno NUMBER(2) CONSTRAINT empfk_deptno_fk REFERENCES dept_pk(deptno)
);

deptno NUMBER(2) CONSTRAINT empfk_deptno_fk REFERENCES dept_pk(deptno)

참조하는 테이블(참조되는 키)

 

 

 


 

 

CREATE TABLE dept_const(
    deptno NUMBER(2) CONSTRAINT deptconst_deptno_pk PRIMARY KEY,
    dname VARCHAR2(14)CONSTRAINT deptconst_dname_unq UNIQUE,
    loc VARCHAR2(13) CONSTRAINT deptconst_loc_nn NOT NULL
    );
    
CREATE TABLE emp_const(
    empno NUMBER(4) CONSTRAINT empconst_empno_pk PRIMARY KEY,
    ename VARCHAR2(10) CONSTRAINT empconst_ename_nn NOT NULL,
    JOB VARCHAR2(9),
    tel VARCHAR2(20) CONSTRAINT empconst_tel_unq UNIQUE,
    hiredate DATE,
    sal NUMBER(7,2) CONSTRAINT empconst_sal_chk CHECK(sal BETWEEN 1000 AND 9999),
    comm NUMBER(7,2),
    deptno NUMBER(2) CONSTRAINT empconst_deptno_fk REFERENCES dept_const(deptno)
    );

PRIMARY KEY : 기본키

UNIQUE : 유일한 값

NOT NULL : NULL 아님

CHECK(조건식) : 조건

REFERENCES : 외래키

 

 

 

 

 

댓글