프로그래밍 일기 — 데이터베이스 — Part 1

배우는 자(Learner Of Life)
6 min readMay 4, 2024

데이터베이스의 여러가지 언어(Languages)

데이터베이스도 방언이 여러개가있다(1).

프로그래밍을 배우면서 또 하나 느낀 것 중 하나는, 데이터베이스(Database)에 대한 세계관역시 방대하다는 것이다. 데이터베이스는, 그 중에서도 특히 SQL기반 데이터베이스는 주로 SQL(Structured Query Language)라는 타입의 언어를 사용하는데, 정형화되고 규칙이 정해져있기에 체계적으로 관리가 가능하다는 장점이 있다.

그런데 한국어에도 충청도 사투리, 경상도 사투리, 강원도 사투리, 전라도 사투리, 제주도 사투리 등등이 다른 것처럼, 데이터베이스의 쿼리 언어에서도 여러가지 다른 하위 언어들이 존재한다. 그렇다면 데이터베이스의 대표적인 방언들은 무엇이 있을까?

데이터 베이스의 여러 하위언어(Sublanguages)(2)

SQL은 무엇일까?

먼저 SQL언어가 무엇인지부터 정의할 필요가 있을 것 같다. 이전에 설명한대로, 데이터베이스를 활용할 수 있게 해주는 언어이다. 데이터베이스내 테이블은 가장 큰 데이터 객체 개념으로써, 일반적으로 생성(CREATE), 제거(DROP), 삽입(INSERT) 등의 명령어를 활용할 수 있다.결국, SQL 명령어는 테이블에 대한 지시어(Instruction)라고 할 수 있다.

테이블에서 조금 더 내려가면 각 테이블을 구성하는 각각의 열(row)이 데이터라고 할 수 있는데, 이러한 데이터를 다룰 수 있는 언어 역시 SQL이다. SQL를 통해 데이터를 활용한 다양한 작업이나 기능을 수행할 수 있다. 즉, 테이블을 생성하는 것 뿐아니라, 데이터를 테이블에 입력하고, 테이블을 제거하거나 수정하고, 사용자에게 권한을 설정하는 작업을 수행할 수 있다.

데이터베이스의 하위 언어들에는 대표적으로 아래 5가지가 있다.

  • DDL (Data Definition Language)
  • DQL (Data Query Language)
  • DML(Data Manipulation Language)
  • DCL (Data Control Language)
  • TCL (Transaction Control Language)

DDL(Data Definition Language)

DDL은 말그대로 데이터를 정의하는 언어이다. 데이터베이스의 스키마(Schema)를 정의하고, 데이터베이스내 객체 구조를 생성 및 수정할 수 있게한다. 그러나 DDL은 데이터를 직접적으로 접근하는 것은 아니며, 데이터베이스의 구조에 대한 명령어이다. 그렇기에 어플리케이션을 통해 데이터베이스에 접근하는 일반적인 유저가 사용하는 경우는 많지 않다. 데이터베이스의 객체라고하면, 대표적으로 Table, Index, Function, Views, Store Procedure, Trigger 등이 있다.

대표적인 DLL의 명령어에는 아래와 같은 것들이 있다.

  • CREATE: 데이터베이스 구조나 객체를 생성할 때 활용한다.
  • DROP: 데이터베이스내 객체를 삭제할 때 사용한다.
  • ALTER: 데이터베이스의 구조를 바꿀 때 사용한다.
  • TRUNCATE: 테이블내 데이터 레코드를 위해 지정된 공간을 포함한 모든 레코드를 삭제할 때 활용한다.
  • COMMENT: 데이터 Dictionary에 코멘트를 추가하기 위해 사용한다. 데이터 구조나 객체에 대한 설명을 추가할 때 용이하다.
  • RENAME: 데이터베이스내 존재하는 객체의 이름을 바꾸기 위해 사용한다.

DQL(Data Query Language)

DQL은 Schema 객체 내에서 쿼리를 수행하기 위해 활용된다. DQL의 목적은 쿼리를 바탕으로 스키마간의 관계 정보를 얻기 위함이다. DQL은 데이터베이스내 데이터를 가져오고 가져온 데이터에 순서를 정할 수 있는 SQL의 부분이라고 할 수 있다. DQL의 유일한 명령어는 SELECT 명령문인데, 이은 데이터베이스에서 데이터를 가져와 특정한 작업을 할 수 있게 끔한다. SELECT 명령문이 특정 테이블이나 테이블들에 실행되면, 쿼리의 결과값이 또다른 임시 테이블에 저장된다. 이러한 임시 테이블은 프론트엔드의 프로그램에 의해 수신되거나 표현될 수 있다.

DML(Data Manipulation Language)

말그대로 데이터를 조작할 수 있는 쿼리언어다. SQL자체가 목적이 데이터베이스내 데이터에 접근하는 것인만큼, SQL에서 가장 큰 부분을 차지한다. 데이터와 데이터베이스에 대한 접근을 제어하는 컴포넌트로써, DCL과 같이 그룹지어져서 구분된다. 대표적인 DML 명령문은 아래와 같다.

  • INSERT: 테이블에 데이터를 삽입하기 위한 명령문이다.
  • UPDATE: 테이블내 존재하는 데이터를 업데이트하기 위함이다.
  • DELETE: 데이터베이스 테이블내 레코드를 삭제하기 위함이다.
  • LOCK: 테이블 제어에 대한 접근을 막는다.
  • CALL: PL/SQL 혹은 Java 서브프로그램을 호출한다. (자주 활용되지않음)
  • EXPLAIN PLAN: 데이터에 대한 접근 경로를 표출한다. (자주 활용되지않음)

DCL(Data Control Language)

DCL은 GRANT 및 REVOKE를 포함하며, 데이터베이스 시스템에 대한 접근 권한 제어 등을 수행한다.

  • GRANT: 유저에게 데이터베이스에 대한 접근을 허용한다(예:GRANT SELECT, UPDATE ON MY_TABLE TO SOME_USER, ANOTHER_USER; ).
  • REVOKE: 유저의 데이터베이스 접근 권한을 차단한다(REVOKE SELECT, UPDATE ON MY_TABLE FROM USER1, USER2;).

TCL(Transaction Control Language)

Transaction은 단수의 실행 유닛(Single Execution Unit)에 여러 작업들을 그룹화하는 역할을 한다. 각 Transaction은 실행시 특정 작업을 시작하며, 그룹내 모든 작업들이 마무리된 후에 실행을 종료한다. 중간에 그 어떤 작업이라도 Fail이 날 경우, Transaction 전체가 Fail된다. 따라서, 모든 작업이 성공해 전체 Transaction이 성공하거나 혹은 하나라도 실패해 전체가 실패하는 두 가지 결과만이 존재한다. 아래 순서 및 명령어들을 통해 Transaction의 실행을 제어한다. 아래 명령어들은 Transaction이 먼저 실행됨을 전제로한다.

  • COMMIT: Transaction 커밋하기 ( COMMIT; )
  • ROLLBACK: 에러 발생시 Transaction을 Rollback하기 ( ROLLBACK; )
  • SAVEPOINT: Transaction내 저장 지점을 지정하기( SAVEPOINT SAVEPOINT_NAME; )

참조:

(1) https://pixabay.com/photos/writing-lead-set-letterpress-705667/

(2) https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/

--

--

배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 그렇기에 살아있음에 감사하며, 세상의 가르침에 목이말라 오늘도 즐겁게 배우려한다.