본문 바로가기
프로그래밍 공부 정리/database

DCL, DDL, DML

by 메기사랑 2021. 11. 22.

DCL: Data Control language (데이터 제어어)
권한부여, 권한을 제거하는 명령어
grant, revoke

 

 

DDL : Data Definition Language(데이터 정의어)
create 테이블 생성
alter 테이블 변경
drop 테이블 삭제

 

테이블의 구조를 변경하는 명령어  ==> alter
- 이미있는 테이블에 새로운 칼럼추가
- 이미있는 테이블에 칼럼을 삭제 
- 이미있는 테이블에 칼럼의 자료형이나 제약을 변경

** 테이블의 구조 변경하기

	- 새로운 컬럼를 추가
			alter table 테이블이름 add 칼럼이름 자료형 옵션
	
	- 칼럼의 자료형 변경
			alter table 테이블이름 modify 컬럼이름 새로운자료형
	
	- 칼럼삭제
			alter table 테이블이름 drop column 칼럼이름
			
	- pk추가
		alter table 테이름이름 add primary key(컬럼이름)
		(단, 컬럼은 not null이어야 합니다)
		
	-fk추가
		alter table 테이블이름 add foreign key(칼럼이름) references 부모테이블이름(칼럼이름)



DML : Data manufulation Language(데이터 조작어)

자료를 추가, 검색, 수정, 삭제

insert
update
delete
select

 

DML 명령어
insert, update, delete을 수행한 후에는 commit 혹은 rollback 으로 명령어의 적용을 해 주어야 합니다.

DML작업을 수행한 후에는 그 작업(들)이 올바르게 수행되었다면 commit 잘못되었다면 rollback을  반드시 해 주어야 합니다.

 

DDL, DCL은 auto commit 입니다.


commit   승인
rollback  취소

 

 

** 이미있는 테이블의 구조만 복사하여 새로운 테이블을 생성

이미 있는 테이블의 구조와 레코드를 복사하여 새로운 테이블을 만들 수 있어요.

create table 테이블이름 as select~~~


ex) dept테이블의 구조와 내용를 복사하여 dept100테이블을 생성

create table dept100 as select * from dept;


==> 테이블의 컬럼이름과 레코드는 복사가 되지만
제약은 복사가 되지 않아요!

필요하다면 제약을 alter 명령어에 의해서 추가해야 합니다.

create table 테이블이름 as select * from 테이블명 where 만족하지않을조건;

create table dept100 as select * from dept where 1=2;

 


** 검색한 결과를 insert하기

insert into 테이블명 select ~~~

ex) dept의 모든 레코드를 검색하여 dept100에 insert하기
insert into dept100 select * from dept;

 

자료의 추가

insert into 테이블이름 values(값1, 값2, ...);
=> values의 값의 개수와 순서는 테이블의 구조와 동일해야 합니다.

inset into 테이블이름(컬럼1, 칼럼2, ..) values(값1, 값2, ..);
=> values의 값의 개수와 순서는 앞에서 나열한 칼럼의 순서와 동일하게 합니다.
단, 나열한 컬럼 이외의 칼럼들은 null을 허용하거나 default값이 있어야 합니다.


자료의 수정

update 테이블이름 set 컬럼1=값1 [, 칼럼2=값2, ....] [where 조건식]

연습) 5번 고객의 주소를 '대한민국 부산'으로 변경
update customer set address = '대한민국 부산' where custid = 5;


자료의 삭제

delete from 테이블이름 [where 조건식]

ex) 고객번호가 5번인 고객을 삭제 해 봅니다.
delete from customer where custid = 5;

 

 

drop VS delete의 차이

drop table 테이블명;
==> 테이블 자체를 삭제하는 것

delete from 테이블명;
==> 테이블은 그대로 있고 레코드가 삭제되는 것.