database : 데이터를 저장하는 공간입니다. 테이블을 만들기 위해서는 데이터베이스를 먼저 만들어야 합니다. user : 각 데이터베이스는 소유자가 존재합니다. 특정 데이터베이스를 이용하는 계정을 user라고 부릅니다. table : 데이터베이스 안에 값을 저장하기 위해 만드는 틀입니다. 행과 열로 구성된 테이블에 데이터를 저장합니다. create database TEST; use TEST; create user 'testuser'@'localhost' identified by 'abcd'; create table test ( ID INT, Name VARCHAR(30) );
HeidiSQL(하이디SQL)을 사용하는 이유는 여러 종류의 DBMS를 하나의 툴로 관리하고 편집할 수 있기 때문입니다. 헷갈리지 말아야 할 것은 HeidiSQL은 DBMS가 아니라 데이터베이스 관리 도구라는 것입니다. DBMS란? 회사는 데이터를 저장하고 관리하기 위해 DBMS, 즉 데이터베이스 관리 시스템을 사용합니다. 오라클, 마이크로소프트 등 회사가 DBMS 제품을 제공합니다. MySQL, MariaDB, MSSQL, PostgreSQL 등이 대표적입니다. 때문에 회사의 전산 시스템이나 소프트웨어에 DB를 뭘 쓰는지 물어봤을 때 “MySQL이요” “MariaDB요” 같은 대답이 나오는 것입니다. HeidiSQL이란? HeidiSQL은 오픈 소스로 만들어져 무료로 사용할 수 있는 데이터베이스 도구입..
자바로 SQL문을 실행하고 데이터베이스를 조작하려면 JDBC를 통해 DBMS와 연결을 시켜줘야 한다. 이때 JDBC의 API인 커넥션(Connection) 객체를 만들고 클라이언트 > 미들웨어 > DBMS > 미들웨어 > 클라이언트로 이어지는 연결 과정이 필요하다. 그런데 이 방법은 클라이언트의 요청이 있을 때마다 커넥션 객체를 생성해야 하기 때문에 비효율적이다. 이러한 문제를 해결하기 위해 커넥션 풀(Connection Pool)을 사용한다. Connection Pool 커넥션 풀은 DBMS로부터 커넥션 해놓은 객체를 풀(pool)에 저장해두고 클라이언트 요청이 오면 커넥션을 빌려주고 작업이 마무리되면 다시 커넥션을 풀에 반납하는 방식으로 작동한다. 클라이언트의 요청이 있을 때마다 DBMS를 찾지 않아..
JDBC(Java Database Connectivity) JDBC는 영문 의미 그대로 자바를 이용해서 데이터베이스에 연결하는 API를 말한다. 자바 언어로 데이터베이스에 있는 데이터를 조작할 수 있다. JDBC가 있기 이전에도 자바를 통한 데이터베이스 접근은 시도됐다. 그러나 각기 다른 구조와 특징을 가지고 있는 DBMS가 여럿이라 문제를 겪었다. 자바는 이런 한계를 극복하고자 모든 DBMS에서 공통적으로 사용할 수 있는 인터페이스와 클래스로 구성된 API를 개발했는데, 그게 JDBC다. JDBC를 기반으로 각 DBMS는 인터페이스와 클래스를 구현한 JDBC 드라이버를 제공한다. 개발자는 자신이 사용하는 DBMS의 벤더로부터 JDBC 드라이버를 다운로드해 자바와 연동할 수 있다. 오라클의 경우 ojdb..
트랜잭션 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위다. 정의된 문장만 봐서는 쉽게 와닿지 않는다. 쉽게 말하면 트랜잭션은 기능을 수행하는 여러 SQL 문들의 묶음이다. 이렇게 SQL문을 임의로 묶는 행위를 '트랜잭션을 정의한다'고 한다. 그렇다면 왜 SQL문을 묶어서 처리하는 걸까. 프로그램에 장애가 발생했을 때 대처하기 위해서다. 가장 직관적으로 이해하기 쉬운 이유 예시를 하나 소개한다. 송금과 입금을 처리하는 프로그램이 있다. A는 B에게 1만원을 송금했다. A의 계좌에서는 1만원이 차감됐다. 이제 B에게 1만원이 입금이 될 차례. 그런데 어떤 이유로 프로그램에 문제가 생겨 입금 기능이 작동하지 않았다. A는 돈을 줬는데 B는 돈을 받지 못한 상황이 돼 버렸다. 치명적인 문제다. 이..
PL/SQL Procedural Language/Structured Query Language의 줄임말이다. 오라클의 SQL 전용 언어라고 보면 된다. 일반 SQL 문으로는 처리하기 어려운 문제들이 있는데, SQL에 변수, 제어, 입출력 등 기능을 추가해서 그런 문제들을 해결할 수 있게 돕는다. PL/SQL는 크게 3가지다. 프로시저 트리거 사용자 지정 함수 트리거(TRIGGER) 트리거는 참조되는 테이블 간 한쪽에 변경이 생기면 다른 한쪽의 값을 자동으로 바꿔주는 자동화 기능이다. 간단한 예로 판매 제품 테이블과 창고 재고 테이블이 있을 때 재고 수량을 늘리면 제품 테이블의 수량도 늘어나는 식이다. 사용문법 CREATE [OR REPLACE] TRIGGER 트리거명 {BEFORE / AFTER} UPD..
PL/SQL Procedural Language/Structured Query Language의 줄임말이다. 오라클의 SQL 전용 언어라고 보면 된다. 일반 SQL 문으로는 처리하기 어려운 문제들이 있는데, SQL에 변수, 제어, 입출력 등 기능을 추가해서 그런 문제들을 해결할 수 있게 돕는다. PL/SQL는 크게 3가지다. 프로시저 트리거 사용자 지정 함수 프로시저(PROCEDURE) 프로시저는 특정 기능을 수행하는 로직을 만들어 놓고 필요할 때 이를 수동으로 동작시키는 방식으로 사용된다. 코드를 좀더 편하고 효율적으로 사용할 수 있다. 또 시스템 성능에도 도움이 된다고 한다. 프로시저는 오라클 데이터베이스에 스키마 객체로 저장된다. 로직을 처리하기만 하고 결과 값은 반환하지 않는다. 사용법 CREAT..
시퀀스(SEQUENCE) 시퀀스(sequence)는 순서에 따라 나열되는 정수의 목록이라고 정의할 수 있다. 또 유일한 값을 생성해주는 오라클의 객체다. 이게 무슨 말인가 싶지만 핵심을 기억하면 그리 이해하기 어려운 개념은 아니다. 핵심은 시퀀스를 생성함으로써 개발자는 기본키처럼(예: id number) 순차적으로 증가하는 칼럼을 헷갈리지 않고 손쉽게 insert 할수 있게 된다는 것이다. 간단한 예제를 통해 개념을 이해해보자. 사용법은 CREATE SEQUENCE 시퀀스명; 이다. 이제 item_seq라는 이름의 시퀀스를 만든다. CREATE SEQUENCE item_seq; 시퀀스가 생성됐다. NEXTVAL NEXTVAL는 현재 시퀀스의 다음 값을 불러온다. SELECT item_seq.NEXTVAL..
ROWNUM ROWNUM은 오라클 내부적으로 생성되는 가상 컬럼이다. 자료의 일부를 잘라내서 확인하는 용도로 자주 활용된다. SQL 조회 결과의 순번을 기준으로 N번째까지 가져오는 식이다. ROWNUM 함수는 파라미터를 갖지 않는다. 우선 예제를 진행하기 위해서 테이블을 만들고 적당히 값을 넣어주도록 한다. -- customers 테이블 생성 CREATE TABLE customers ( customer_id number(10) NOT NULL, last_name varchar2(50) NOT NULL, first_name varchar2(50) NOT NULL, favorite_website varchar2(50), CONSTRAINT customers_pk PRIMARY KEY (customer_id)..
내장함수 SQL에서는 함수를 사용한다. 오라클 같은 DBMS가 기본적으로 제공하는 함수를 내장함수라고 한다. 반면 사용자가 필요에 따라 직접 만드는 건 사용자 정의 함수라 불린다. 내장함수는 또다시 단일행함수 집계함수 분석함수 로 나뉜다. 단일행 함수는 한 줄의 레코드를 처리해주는 함수로 이해하면 된다. 반면 집계함수와 분석함수는 받아온 레코드를 하나의 그룹으로 인식하고 하나의 결과를 도출한다. 간단한 예로 평균을 내는 집계함수 AVG는 여러 레코드 값을 통해 하나의 값을 도출한다. 단일행 함수는 숫자, 문자, 날짜, 변환, NULL 등으로 또 한번 세분화된다. 그런데 굳이 이런 구분을 할 필요는 못 느끼겠다. 때문에 이 글에서 소개하는 ROUND, ABS, UPPER, SUBSTR은 단일행 함수에 속한..