SQLD: DDL, TCL
DDL
DDL은 Data Definition Language의 약자이다. 즉, 데이터 정의를 하는 언어라는 말이며, 테이블이나 이런 객체를 생성, 처리하는 언어이다.
테이블과 같은 객체르 생성/수정/삭제를 할 수 있다.
- CREATE
- ALTER
- DROP
- RENAME
- TRUNCATE
CREATE
새로운 객체를 생성할 때 사용하는 명령어이다. 여기서 객체라 함은 테이블, 사용자 계정, 시퀀스, 뷰 등을 의미한다.
테이블 생성 전에 필요한 자료형:
- VARCHAR2(n)
- NUMBER(n, m)
- DATE
이외에도 다양한 자료형이 있지만, 이 세 개로 오라클 데이터베이스를 사용하는데에 지장이 없다.
VARCHAR2는 문자형 값을 n바이트까지 입력받을 수 있는 가변형 문자열이다.
예: varchar2(10)인 컬럼에 ‘abcd’를 입력한 경우에 알아서 4 바이트까지만 공간을 이용한다.
여담으로, CHAR(n)은 문자형 값을 n바이트까지 입력받을 수 있는 고정형 문자열이다.
NUMBER는 숫자형 값을 n자리만큼 입력받고, m자리만큼 소수를 입력받는다.
실수와 정수 모두 표현이 가능하며, n와 m은 생략 가능하다. (보통은 단순하게 NUMBER로 사용한다)
DATE는 날짜형 값을 입력받는다.
테이블 생성 문법:
1
2
3
4
5
6
CREATE TABLE QUIZ_TABLE (
Q_ID NUMBER(3,0) NOT NULL, -- 컬럼명 자료형 [DEFAULT] [NULL여부]
Q_CONTENT VARCHAR2(200) NOT NULL,
Q_ANSWER VARCHAR2(100),
REG_DATE DATE DEFAULT SYSDATE
);
제약조건
PRIMARY KEY(PK)
- NOT NULL + UNIQUE
- 식별자 규칙을 물리적 모델링 한 것으로, NULL값 입력 불가, 중복 불가
1 2
ALTER TABLE QUIZ_TABLE -- 테이블을 변경 ADD CONSTRAINT PK_QUIZ_TABLE PRIMARY KEY(Q_ID); -- 제약조건 추가, Q_ID를 PK로 설정
UNIQUE KEY(UK)
- UNIQUE
- NULL값은 입력할 수 있게 하며, 중복 불가
1 2
ALTER TABLE QUIZ_TABLE ADD CONSTRAINT UK_QUIZ_TABLE UNIQUE(Q_CONTENT);
NOT NULL
- NULL 값이 안들어오게 한다
CHECK
- 특정 컬럼에 데이터를 입력할 때, 지정한 데이터만 입력하도록 설정
- 입력받는 범위를 강하게 설정
1 2
ALTER TABLE TB_CUST -- 테이블을 변경 ADD CONSTRAINT CK_DEL_YN CHECK(DEL_YN IN ('Y', 'N'));
FOREIGN KEY(FK)
- 테이블끼리 연결되어 있는 관계를 물리적 모델링한 것
- FK를 설정하면 무결성을 지원해준다
1 2
ALTER TABLE TB_CUST_BADGE-- 테이블을 변경 : 키를 빌려가는 입장에서 변경 ADD CONSTRAINT FK_CUST_BADGE_1 FOREIGN KEY(CUST_ID) REFERENCES TB_CUST(CUST_ID);
ON DELETE CASCADE
- 참조하는 CUST_ID가 삭제되면 함께 삭제하겠다는 의미
ON DELETE RESTRICT
- 부모 테이블의 자료를 삭제하려하면 막는 문법
DROP CONSTRAINT
- 제약조건 삭제
ALTER
- ALTER TABLE ADD 컬럼명 : 컬럼 추가
- ALTER TABLE DROP COLUMN 컬럼명 : 컬럼 삭제
- ALTER TABLE MODIFY 컬럼명 : 컬럼 수정
- ALTER TBALE RENAME 컬럼명 TO 컬럼명2: 컬럼명 이름 변경
삭제
- DROP TABLE : 테이블 영구 삭제
- DROP TABLE 테이블 CASCADE CONSTRAINT : 연결된 관계선(FK)도 함께 제거
- TRUNCATE : 테이블의 데이터 삭제
DELETE/DROP/TRUNCATE 차이
DDL은 자동 커밋이 되기 때문에 롤백이 불가능하다.
DELETE | TRUNCATE | DROP | |
---|---|---|---|
문법 | DML | DDL | DDL |
롤백 가능 여부 | O | X | X |
테이블 삭제 여부 | X | X | O |
DCL
DCL은 Data Control Language의 약자이다. 즉, 데이터를 제어하는 언어이다.
사용자에게 자원에 대한 권한을 줄 때 사용되는 언어이다.
- GRANT
- REVOKE
GRANT
권한을 부여하는 명령어
GRANT 권한 [ON 대상객체] TO 계정 [WITH GRANT OPTION]
예: GRANT SELECT ON USER_B.TAB1 TO USER_A;
WITH GRANT OPTION
은 권한을 받을 때, 또 다른 사람에게 이 권한을 공유할 수 있게 하는 옵션이다.
REVOKE
권한을 회수하는 문법
REVOKE 권한 [ON 대상객체] FROM 계정
예: REVOKE SELECT ON USER_B.TAB1 FROM USER_A;
예제: 다음과 같이 권한이 부여되고 회수되었을 때, 어떤 권한이 남는지 명시해주세요.
USER_B : USER_C : UPDATE
CASCADE
: GRANT OPTION으로 추가로 준 권한고 연쇄적으로 회수한다.
ROLE
여러 권한을 한번에 부여할 수 있도록 묶어놓은 개념이다. 주로 비슷한 유형의 권한들을 묶어 한 번에 부여한다.