DML (Data Manipulation Language)
데이터 조작어 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정, 삭제하는 역할의 언어. 데이터베이스 사용자가 질의어를 통해 저장된 데이터를 실질적으로 처리하는데 사용.
DML은 타겟 테이블을 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에 실시간으로 테이블에 반영되지 않아 Commit 명령어를 통해 트랜잭션을 종료해야 변경 사항이 테이블에 반영된다. 따라서 DML에 의한 데이터 변동을 Commit하지 않았다면 Rollback으로 다시 되돌릴 수 있다.
select | 테이블에서 조건에 맞는 튜플 검색 | select 컬럼 from 테이블 where 조건 order by 컬럼 ASE/DESC limit 개수 |
insert | 새로운 튜플 삽입 | insert into 테이블(컬럼1, 컬럼2) value(값1, 값2) |
update | 테이블에서 조건에 맞는 튜플의 내용을 변경 | update 테이블 set 컬럼=변경할 값 where 조건 |
delete | 테이블에서 조건에 맞는 튜플 삭제 | delete from 테이블 where 조건 |
DDL (Data Definition Language)
데이터 정의어 데이터를 생성하거나 수정, 삭제하는 등 데이터의 전체 골격을 결정하는 역할의 언어.
명령어를 입력하는 순간 작업이 즉시 반영(auto commit)됨
create | schema, domain, table, view, index 정의 | create schema 스키마명 create table 테이블명 ( 컬럼명 테이터타입 조건, … ) |
alter | able/column에 대한 정의를 변경 | alter 테이블 add [컬럼명] [데이터타입] [조건] alter 테이블 drop column [컬럼명] alter 테이블 alter column [컬럼명] [데이터타입] [조건] alter 테이블 modify column [컬럼명] |
drop | schema, domain, table, view, index 삭제 | drop table 테이블 |
rename | 테이블의 이름을 변경 | rename table 기존디비명.기존테이블명 to 이동할디비명.변경할테이블명 |
truncate | 테이블을 초기화 시키는 역할을 한다. (auto increment까지) | truncate table 테이블명 |
- 제약조건not null 값에 null을 허용하지 않음. 반드시 입력되어야 하는 데이터
unique 컬럼에 중복 값을 허용하지 않음 primary key 해당 컬럼을 기본키로 지정 foregin key 외래키를 지정할 때 사용 (foregin key (컬럼명) references 참조테이블(참조컬럼명) check 컬럼에 입력되는 데이터를 체크, 특정 조건에 맞는 데이터만 입력받음 default 값이 빈 채로 입력되면 디폴트 값으로 채워짐 index 인덱스로 지정할 때 사용 - 테이블 컬럼 조건에 들어갈 수 있는 키워드
DCL (Data Control Language)
데이터 제어어 데이터베이스에 접근하거나 객체에 권한을 주는 역할의 언어. 데이터의 보안, 무결성, 회복 등을 정의하는데 사용.
grant | 특정 데이터베이스 사용자에게 특정 작업에 대한 수행권한을 부여 | grant select/delete/references/all privileges… on 객체명 to 사용자 with grant option |
revoke | 특정 데이터베이스 사용자에게 특정 작업에 대한 수행권한을 박탈, 회수 | revoke select/delete/references/all privileges… on 객체명 from 사용자 |
- ROLE
- 반복적인 grant, revoke 명령을 줄이기 위함. 권한별로 사용자 그룹을 만들어 그룹에 권한을 부여함
- create role 롤명 ⇒ grant 권한리스트 on 객체 to 롤명 ⇒ grant 롤명 to 사용자리스트
- drop role 롤명 / revoke 권한리스트 on 객체 from 롤명 / revoke 롤명 from 사용자
TCL (Transaction Control Language)
트랜잭션 제어어 DCL과 비슷한 맥락이지만 데이터 제어가 아닌 트랜잭션을 제어할 때 사용한다.
- 트랜잭션: 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위. SQL에 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다.
commit 모든 작업을 DB에 영구 저장. 하나의 트랜잭션 과정이 완전히 종료됨 commit to savepoint 세이브포인트명
rollback | 커밋되기 이전의 데이터로 돌아감 | rollback to savepoint 세이브포인트명 |
savepoint | 커밋 전 특정 시점을 저장 | savepoint 세이브포인트명 |
그 외
Delete VS Truncate
- Delete (DML)
- 명령어 실행 후 commit 해야 데이터가 완전히 삭제됨 (커밋 전이라면 롤백으로 복구 가능)
- 데이터 전체를 삭제하는 것이 아니라 복구할 수 있게끔 삭제
- 시스템 부하가 크며 메모리를 많이 차지
- 정상적인 데이터 복구 가능성이 높다
- Truncate (DDL)
- 명령어 실행시 바로 데이터 삭제됨 (롤백해도 되돌릴 수 없음)
- 데이터 전체를 날려버림 (조건도 붙일 수 없음)
- 시스템 부하가 적고 메모리도 많이 차지하지 않음
- 정상적인 데이터 복구 불가능