티스토리 뷰
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)
);
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 테이블명;

감사합니다.
'데이터 베이스' 카테고리의 다른 글
[Database] DML 데이터 조작어 : 데이터 조작을 통한 효율적인 관리 (0) | 2024.01.19 |
---|
- Total
- Today
- Yesterday
- 프로세스
- Cors
- 데이터 베이스
- 프론트
- AJAX
- 템플릿
- 자바스크립트
- Front
- spring
- git
- java
- Mac
- 깃허브 액션
- 개발블로그
- 오라클
- aws
- Fetch
- 개발
- 비동기
- DBeaver
- 개발환경
- Spring Security
- 코딩테스트
- 디자인패턴
- JavaScript
- 네트워크
- 개발자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |