데이터베이스(DB)는 유용한 데이터의 집합으로, 검색에 용이하게 데이터를 저장하고 수정 및 삭제가 용이해야 한다.
데이터테이스 관리 시스템 또는 DBMS(DataBase Management System)는 기업이 지속적으로 유지 관리해야 하는 방대한 양의 데이터를 편리하게 저장하는 시스템이다. 효율적으로 관리하고 검색할 수 있는 환경을 제공해주는 시스템 소프트웨어이다.
- 공유폴더 처럼 데이터의 공유가 가능하다.
- 중복파일을 배제하여 데이터 중복성이 감소된다.
- 데이터의 불일치를 피할 수 있다.
- 데이터의 무결성을 유지할 수 있다.
- 캡슐화 : 올바른 값만 입력이 가능
- 데이터 보안을 유지할 수 있다.
- 정해진 방식인 table 형태로 저장하기 때문에 표준화가 가능하다.
관계형 데이터테이스 관리 시스템 또는 RDBMS(Relational DataBase Management System)는 서로 연결된 데이터테이스 관리 시스템이다. 기본적인 데이터 저장 단위는 테이블이며, 로우(Row)와 칼럼(Column)으로 구성되어 있다.
DDL은 데이터 정의어 라고도 한다. 데이터베이스 구조 정의에 사용하는 언어로, 테이블이나 칼럼 등을 생성(Create), 수정(alter), 삭제(drop)하는 명령어이다.
CREATE : 테이블을 생성하는데 사용
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... );
ALTER (추가) : 열을 추가
ALTER TABLE table_name ADD column_name datatype;
ALTER (삭제) : 열을 삭제
ALTER TABLE table_name DROP COLUMN column_name;
DROP : 테이블을 삭제하는데 사용
DROP TABLE table_name;
DML은 데이터 조작어 라고도 한다. 데이터 조작에 사용하는 언어로, 데이터의 입력(insert into구문), 데이터의 수정(update 수정할 테이블명~), 데이터의 삭제(delete from 테이블명~)하는 명령어이다.
INSERT INTO : 테이블에 새로운 데이터를 삽입하는 데 사용
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
UPDATE : 기존 데이터를 수정하는 데 사용
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
DELETE : 데이터를 삭제하는 데 사용
DELETE FROM table_name WHERE condition;
테이블의 데이터를 조회(Select)
SELECT column1, column2, ... FROM table_name;
데이터 조절어(권한) 라고도 한다. 데이터베이스에 대한 접근 권한 제어에 사용하는 언어로, 데이터 권한(grant문)을 부여, 데이터 회수(revoke문)하는 명령어이다.
GRANT : 사용자에게 특정 작업을 수행할 권한을 부여하는데 사용
GRANT privilege_name ON object_name TO {user_name |PUBLIC |role_name} [WITH GRANT OPTION];
※ WITH GRANT OPTION은 해당 사용자가 다른 사용자에게 권한을 부여할 수 있음
REVOKE : 사용자의 특정 작업 권한을 취소하는데 사용
REVOKE privilege_name ON object_name FROM {user_name |PUBLIC |role_name};
트랜잭션 제어라고도 한다. DCL에서 트랜잭션을 컨트롤하는 명령어를 TCL로 분류한다. ex) Commit, RollBack, SavePoint
SQL(Structured Query Language)은 관계 DB를 처리하기 위해 고안된 언어로, 독자적인 문법을 갖는 DB의 표준 언어이다.
- 데이터를 조회, 입력, 수정, 삭제할 수 있다.
- 문장뒤에 ;을 반드시 줘야 된다.
SQL*Plus는 SQL 명령문 기능을 제공하며, 칼럼이나 데이터의 출력 형식을 설정한다. 환경 설정하는 기능을 제공한다.
- 문장뒤에 ;을 붙이지 않아도 실행이 되는 명령어이다.
- 오라클 접속 : 오라클서버에서 SQL(DDL, DML, DCL) 명령어를 입력하고 서버로 전송한다. 이때, 사용자가 요청한 SQL구문에 맞는 데이터를 찾아서 표형태로 데이터를 전송해서 보여준다.
유연한 데이터 모델이다. 다양한 데이터 모델을 지원하며, 스키마 없이 데이터를 저장할 수 있다. 분산 확장성으로, 대용량 데이터 처리와 수평 확장이 용이하다. 단순한 데이터 구조와 직접적인 접근 방식으로 인해 빠른 읽기 및 쓰기 작업이 가능하다.
🎨 장점
- 확장성과 성능 : 대량의 데이터를 처리하고 빠른 속도로 확장 가능하다.
- 유연한 데이터 구조 : 스키마 없이 데이터를 저장할 수 있어 더욱 유연한 데이터 모델링이 가능하다.
- 분산 환경 지원 : 다수의 서버에 데이터를 분산하여 처리할 수 있어 고가용성과 복구력을 갖추며, 장애에 대한 내구성이 뛰어나다.
🎨 단점
- 일관성과 무결성의 보장 : 일부 NoSQL 데이터베이스는 일관성과 무결성을 보장하지 않는 모델을 사용하므로, 데이터의 일관성을 유지하는 작업은 개발자가 직접 관리해야 한다.
- 쿼리의 제한 : NoSQL은 특정 데이터 구조에 최적화되어 있어 복잡한 조인 연산이 제한적
- 부족한 표준화 : 다양한 NoSQL 데이터베이스 시스템마다 쿼리 언어와 API가 다르며, 표준화된 표현 방법이 부족하다.
오라클이란 미국의 오라클 회사에서 제작한 세계 점유율 1위 데이터베이스 관리 시스템이며 현재 유닉스 체제에서 가장 많이 사용되는 DBMS이다.
Multiple databases 튜닝 가능하고, 다수의 사용자가 동시에 접근이 가능하다. 변경 plan을 작성하고 실제 구현하기 전에 변경 사항의 효과를 볼 수 있으며, 생산 시스템을 방해하지 않는다.
- 분산처리 : DBMS 실행 컴퓨터, 서버 역할 컴퓨터, DB 응용 프로그램 실행 컴퓨터 다르게 분산처리한다.
- 용량 및 처리 : 다른 데이터베이스보다 고성능의 트랜잭션을 처리하며, Cost 비용을 최소화 하기 위해 테이블과 인덱스를 분석한다.
비용적인 부담이 증가한다. 기능이 많아서 초보자에게 어려울 수 있고, 높은 지원 하드웨어 사양을 필요로 한다.
MySQL은 전세계적으로 가장 널리 사용되고 있는 오픈 소스 데이터베이스이며, MySQL AB사가 개발하여 배포 및 판매하고 있는 데이터베이스 관리툴이다.
1MB의 RAM만 사용할만큼 용량 차지가 적어 매우 적은 오버 헤드를 사용한다. 처리속도가 빠르고 데이터 처리에 용이하다는 장점이 있다. 다른 데이터 관리 툴에 비해 구조가 간단하여 사용하기가 매우 쉽고, 결정적으로 MySQL 데이터베이스는 무료라서 비용적인 부담이 적다. 또한 거의 모든 운영체제에서 사용을 지원한다.
복잡한 쿼리는 성능을 저하 시키며, 트랜잭션 지원이 완벽하지가 않다. 또한, 사용자정의 함수의 사용이 쉽지 않아 유연하지가 않다.
Oracle은 하나의 통합 스토리지를 공유하는 방식을 사용하며, 다양한 조인 방식을 제공한다. 별도의 DBMS 설치 없이 사용해야 하며, 높은 메모리 사용율을 보인다.
반면에 MySQL은 각 DB 서버마다 독립적인 스토리지를 할당하고, 중첩 루프 조인 방식만을 제공한다. 별도의 DBMS 설치를 통해 사용 가능하고, 낮은 메모리 사용율을 보인다.
Oracle과 MySQL은 SQL 구문에서도 차이가 있다.
Oracle은 DB 서버가 통합된 하나의 스토리지를 공유하는 방식 이라면 MySQL은 DB 서버마다 독립적인 스토리지를 할당하는 방식이다.
Oracle은 중첩 루프조인과 해시 조인 그리고, 소트 머지 조인 방식을 제공한다. MySQL은 중첩 루프 조인 방식만을 제공한다.
Oracle은 별도의 DBMS을 설치하여 사용할 수 없지만, MySQL은 별도의 DBMS를 설치하여 사용할 수 있다.
Oracle은 메모리 사용율이 크기 때문에 최소 수백 MB 이상이 되어야 설치가 가능 하지만, MySQL은 메모리 사용율이 낮기 때문에 1MB 환경에서도 설치가 가능하다.
- Null 값 확인 함수
Oracle :NVL
MySQL :IFNULL
- 현재 날짜 및 시간 확인 함수
Oracle :SYSDATE
MySQL :DATE()
- 날짜 포멧 변환
Oracle :TO_CHAR
MySQL :DATE_FORMAT
- 요일 변환의 숫자 범위
Oracle :일,월,화,수,목,금,토를 1,2,3,4,5,6,7로 인식
MySQL :일,월,화,수,목,금,토를 0, 1,2,3,4,5,6로 인식
- 문자와 문자 합치는 방법
Oracle :' '
MySQL :COMCAT
- 형변환 방법
Oracle :TO_CHAR
MySQL :CAST
- 페이징 처리
Oracle :ROWNU BETWEEN 0 AND 10
MySQL :LIMIT
- 시퀀스 사용시 다음 번호 불러오는 방법
Oracle :시퀀스명.NEXTVAL
MySQL :시퀀스명.CURRVAL