[Database] DML DDL DCL

DML DDL DCL


데이터베이스 명령어는 총 세가지로 나눠진다. DML(Data Manipuation Language), DDL(Data Definition Language), DCL(Data Control Languge) 이렇게 나눠진다.

  • DML : select, insert, update, delete
  • DDL : create, alter, drop
  • DCL : grant, revoke, denay

DML은 데이터 조작어인데 많이 쓰이는 명령어이다. DDL은 테이블을 생성, 변경, 삭제등 데이터베이스 개념을 정의하는 언어이다. 그래서 DML에 있는 COMMIT과 ROLLBACK의 개념 없이 바로바로 반영된다.
DCL은 사용자에게 권한을 주고 뺏는 데이터 제어어 이다. 주로 관리자들이 사용하고 주니어는 쓸 일이 없다.

create drop


create는 테이블이나 뷰, 인덱스 등 생성하는 명령어이다. 이 중 간단하게 테이블을 한 번 만들어 보겠다.

CREATE TABLE kr_company (
    cid int not null primary key
    , cname varchar(100)
    , cproperty varchar(100)
);

CREATE TABLE 테이블 명 ( 컬럼 컬럼타입(글자제한) ); 형식으로 구성되어 있다. not null은 null 값이면 안된다는 뜻이고 primary key는 데이터를 식별할 수 있는 유일한 값을 지정하는 뜻이다. 실행하고 좌측 화면에 새로고침하면 새 테이블 kr_company가 생성되어있음을 확인할 수 있다.
이렇게 생성한 테이블을 삭제하려면 delete가 아닌 drop을 써야한다.

drop table kr_company;

drop은 create 문과 달리 간단하다. drop table 테이블 명;이 다이다. 앞에서 설명한 것처럼 rollback이 안되기 때문에 신중해야한다.

insert


앞에서 배운 INSERT 문은 INSERT INTO 테이블 (컬럼명1, 컬럼명2) VALUES (‘값1’, ‘값2’); 의 형태였다. 그러나 아래처럼 컬럼명을 생략하고 데이터를 넣을 수 있다.

insert into kr_company
    values (15, '두산중공업', '중공업');

update


앞에서 INSERT 한 ‘두산중공업’을 ‘배달의 민족’으로 변경해 보겠다. UPDATE문을 아래와 같이 쓰면 변경시킬 수 있다.

update kr_company
set cname = '배달의 민족'
    , cproperty = 'IT'
where cid = '15';

실행시키고 commit을 하면 ‘두산 중공업’이 ‘배달의 민족’으로 데이터가 변경된 것을 볼 수 있다. 기능적으로 이런 식으로 primary key 값도 변경이 가능은 하지만 데이터가 꼬여 시스템 마비를 일으킬 수 있으므로 함부로 변경하면 안된다.

delete


기본적으로 delete는 delete from 테이블 where 조건 형식으로 쓴다. 위에서 UPDATE한 ‘배달의 민족’ 데이터를 지운다면 cid = ‘15’ 조건을 줄 수 있을 것이다. 그러면 ‘배달의 민족’ 데이터만 지워질 것이다. 반면 아래와 같이 cproperty = ‘IT’라는, cproperty가 IT라는 특정 조건을 주면 해당 조건의 데이터가 모두 지워진다.

delete from kr_company
    where cproperty = 'IT';

비추하는 형태가 있는데 아래와 같이 where 조건을 안주는 형태이다.

delete from kr_company;

그러면 kr_company 테이블의 모든 데이터가 지워진다. 얼른 rollback을 시켜주고 실수하지 않도록 주의해야한다.

DEL_YN


실무에서는 DELETE로 직접 데이터를 지우기 보다 DEL_YN 컬럼을 만들어서 DEL_YN 컬럼 값을 N, Y로 변환하여 사용한다.

update army_tank
set del_yn = 'Y'
where tid = 6;

이렇게 변경하고 SELECT 할때는 WHERE절에 DEL_YN = ‘N’ 조건을 붙여 조회하면 된다.

select * from army_tank
    where del_yn = 'N';

이렇게 하면 실수로 삭제한 데이터를 복원할 수 있고, 사용자가 자신이 삭제한 행동을 기억 못하고 데이터가 안뜬다고 클레임했을 때 DEL_YN의 변경 기록을 보고 증거로 제시할 수 있는 장점이 있다.






© 2021.11. by 21thkafka

Powered by 21thkafka