티스토리 뷰

DDL 이란?

 

Data Definition Language의 약자이다.

데이터 정의 언어로 객체(OBJECT)를 만들고(CREATE), 수정하고(ALTER), 삭제(DROP)하는 구문을 말한다.

 

 

 

 

CREATE (DDL)

 

-- [표현법]
CREATE TABLE 테이블 명 (
    칼럼명 자료형,
    칼럼명 자료형,
    칼럼명 자료형,
    ...
);

 

 

 

 

칼럼에 COMMENT 달기

 

[표현법]
COMMENT ON COLUMN 테이블명.칼럼명 IS '주석내용';

EX)
COMMENT ON COLUMN MEMBER.MEMBER_ID IS '회원아이디';
COMMENT ON COLUMN MEMBER.MEMBER_PWD IS '회원비밀번호';

코멘트 된 예시
주석달기 결과

 

 

 

 

 

제약조건

 

데이터 무결성 보장을 목적으로 유효한 데이터 값을 유지하기 위해 제약조건을 걸어줘야한다.

제약 조건 종류에는 NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY이 있다.

 

제약 조건 종류
제약 조건 종류

 

 

Tip) 제약 조건 부여 시 2가지 모두 제약 조건명도 지정할 수 있다.

 

 

 

 

1. NOT NULL 

NULL 값이 절대로 들어와서는 안되는 칼럼에 부여하는 제약조건 입니다.

즉, 삽입, 수정 시 NULL값을 허용하지 않도록 제한하는 제약조건

 

-- 예시) 칼럼레벨 방식
CREATE TABLE MEM_NOTNULL (
    MEM_NO NUMBER NOT NULL,
    MEM_ID VARCHAR2(20) NOT NULL,
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER CHAR(3),
    PHONE VARCHAR2(15),
    EMAIL VARCHAR2(30)
);

칼럼 속성 NOT NULL 보기
칼럼 속성 제약조건 보기

 

 

 

2. UNIQUE

칼럼에 중복값을 제한하는 제한조건이다.

삽입, 수정 시 기존에 해당 칼럼값에 중복된 값이 있을 경우 추가 또는 수정이 되지 않게끔 제약하는 제약조건

 

-- 예시
CREATE TABLE MEM_UNIQUE(
    MEM_NO NUMBER NOT NULL,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,	-- 칼럼레벨 방식
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER VARCHAR2(3),
    PHONE VARCHAR2(15),
    EMAIL VARCHAR2(30)
);

 

 

3. CHECK

칼럼에 기록될 수 있는 값에 대한 조건을 설정하는 제약조건

-- 예시)
CREATE TABLE MEM_CHECK(
    MEM_NO NUMBER NOT NULL,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,	
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER VARCHAR2(3) CHECK (GENDER IN ('남','여')),       -- 칼럼레벨 방식
    PHONE VARCHAR2(15),
    EMAIL VARCHAR2(30),
    MEM_DATE DATE NOT NU
);

 

 

4. DEFAULT

특정 칼럼에 들어올 값에 대한 기본값 설정하는 것이다! 제한 조건은 아니다!

DEFAULT 설정을 먼저하고 제약조건을 걸어야한다! 왜냐? 제약조건이 아니기 때문에!!

 

-- 예시
CREATE TABLE MEM_DAFAULT(
    MEM_NO NUMBER NOT NULL,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,	
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER VARCHAR2(3) NOT NULL CHECK (GENDER IN ('남','여')),
    PHONE VARCHAR2(15),
    EMAIL VARCHAR2(30),
    MEM_DATE DATE DEFAULT SYSDATE NOT NULL		-- 칼럼레벨 방식
);

 

 

5. PRIMARY KEY (기본키)

테이블에서 각 행들의 정보를 유일하게 식별 할 수 있는 칼럼에 부여하는 제약조건

 

식별할 수 있는 조건

  • 중복 값이면 안된다.
  • NULL  값이면 안된다.

 

-- 예시)
CREATE TABLE MEM_PRIMARYKEY(
    MEM_NO NUMBER CONSTRAINT MEM_PK PRIMARY KEY,        -- 칼럼레벨 방식
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,	
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER VARCHAR2(3) NOT NULL CHECK (GENDER IN ('남','여')),
    PHONE VARCHAR2(15),
    EMAIL VARCHAR2(30),
    MEM_DATE DATE DEFAULT SYSDATE NOT NULL		
);

 

 

6. FOREIGN KEY (외래키)

해당 칼럼에 다른 테이블에 존재하는 값만 들어와야 하는 칼럼에 부여하는 제약조건

"다른테이블(부모테이블)을 참조한다" 라는 표현한다.

즉, 참조된 다른 테이블(부모 테이블)이 제공하고 있는 값만 들어올 수 있다.

 

Tip) 외래키 제약조건에는 NULL 값이 들어갈 수 있다.

 

-- 표현법
칼럼명 자료형 CONSTRAINT 제약조건명 REFERENCES 참조할 테이블 명(참조할 칼럼 명)

-- 예시
CREATE TABLE MEM_FOREIGN(
    MEM_NO NUMBER PRIMARY KEY,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,	          
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GRADE_ID CHAR(2) REFERENCES MEM_GRADE ON DELETE SET NULL,            -- 칼럼레벨 방식
    GENDER VARCHAR2(3) NOT NULL CHECK (GENDER IN ('남','여')),
    PHONE VARCHAR2(15),
    EMAIL VARCHAR2(30),
    MEM_DATE DATE DEFAULT SYSDATE NOT NULL		
);

 

 

[FOREIGN KEY 옵션]

  • ON UPDATE SET NULL : 부모데이터를 변경할 때 해당 데이터를 사용하는 자식데이터를 NULL로 바꾸겠다.
  • ON UPDATE SET DEFAULT : 부모데이터를 변경할 때 해당 데이터를 사용하는 자식데이터를 기본값으로 변경하겠다.
  • ON UPDATE CASCADE : 부모데이터를 변경할 때 해당데이터를 사용하는 자식데이터를 같이 변경하겠다. 자주사용(x)
  • ON DELETE SET NULL : 부모데이터를 삭제할 때 해당 데이터를 사용하는 자식데이터를 NULL로 바꾸겠다.
  • ON DELETE SET DEFAULT : 부모데이터를 삭제할 때 해당 데이터를 사용하는 자식데이터를 기본값으로 변경하겠다.
  • ON DELETE CASCADE : 부모데이터를 삭제할 때 해당데이터를 사용하는 자식데이터를 같이 삭제하겠다. 자주사용(x)
  • ON DELETE RESTRICTED : 삭제제한  기본옵션

 

 

 

 

ALTER

 

테이블또는 객체 구조를 수정하는 구문

 

 

1. 칼럼 추가,수정,삭제

 

a) 칼럼 추가(ADD) 

-- 칼럼 추가
ALTER TABLE 테이블명 ADD 칼럼명 자료형 [제약조건 or Default];

 

 

b) 칼럼 자료형 수정(MODIFY) 

-- 칼럼 자료형 수정
ALTER TABLE 테이블명 MODIFY 수정할칼럼명 바꾸고자하는 자료형 

 

PostgreSQL (칼럼 자료형, 칼럼명 수정)

-- [PostgreSQL (칼럼 자료형, 칼럼명 수정)]
-- 예시 : 칼럼 자료형 변경
ALTER TABLE 테이블명
ALTER COLUMN 칼럼명 TYPE 새로운데이터타입;

-- 예시 : 칼럼명 수정
ALTER TABLE 테이블명
RENAME COLUMN 현재칼럼명 TO 변경할칼럼명;

 

Oracle (칼럼 자료형, 칼럼명 수정)

-- [Oracle (칼럼 자료형, 칼럼명 수정)]
-- 예시: 칼럼 자료형 변경
ALTER TABLE 테이블명
MODIFY 칼럼명 테이터타입;

-- 예시: 칼럼명 수정
ALTER TABLE 테이블명
RENAME COLUMN 현재칼럼명 TO 변경할칼럼명;

 

 

Tip) 현재 변경하고자 하는 칼럼에 이미 담겨있는 값과 완전히 다른 타입으로는 변경이 불가능하다.

 

 

 

c) 칼럼 삭제(DROP) 

--  Postgre, Oracle 칼럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 칼럼명;

 

Tip) DDL문은 복구가 불가능하다. 즉, ROLLBACK이 안된다.!

 

 

 

 

2. 제약조건 추가, 삭제

 

a) 제약조건 추가(ADD)

 

PostgreSQL에서는 모든 제약조건은 ADD 하며 추가하지만 NOT NULL 제약조건은 SET 을 사용 해야한다

-- 추가는 각각해도되고 한꺼번에 해도됩니다.
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건 명 UNIQUE(칼럼명);
ADD CONSTRAINT 제약조건_이름 PRIMARY KEY(칼럼명);
ALTER COLUMN 칼럼명 SET NOT NULL;

 

 

Oracle에서는 모든 제약조건은 ADD 하며 추가하지만 NOT NULL 제약조건은 MODIFY라고 작성해야한다

-- 추가는 각각 해도되고 한꺼번에 해도됩니다.
ALTER TABLE 테이블명
ADD PRIMARY KEY (칼럼명1)

-- 한꺼번에 할 때
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건 명 UNIQUE(칼럼명2)
MODIFY 칼람명3 NOT NULL;

 

 

b) 제약조건 삭제(DROP) 

postgreSQL

-- NOT NULL 제약조건 삭제
ALTER TABLE 테이블명
ALTER COLUMN 칼럼명 DROP NOT NULL;

-- 다른 제약조건 삭제 제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;

 

 

Oracle에서는 모든 제약조건은 DROP 하며 삭제하지만 NOT NULL 제약조건은 MODIFY라고 작성해야한다.

-- NOT NULL 제약조건 삭제
ALTER TABLE 테이블명 MODIFY 칼럼명 NULL;

-- 다른 제약조건
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;
ALTER TABLE 테이블명 DROP PRIMARY KEY;

 

 

 

 

3. 테이블 이름 변경

ALTER TABLE 현재테이블명 RENAME TO 새로운테이블명;

 

 

 

 

DROP

 

테이블을 삭제하는 구문입니다.

이거 테이블 삭제하면 되돌릴 방법이 절대 없으니 사용할 때는 5번정도 더 생각하고 하는게 좋겠습니다.

[표현법]
DROP TABLE 테이블명;

 

 

 

 

감사합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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
글 보관함