이전에도 MySQL을 활용해본 적이 있지만, DB를 MariaDB를 활용해 공부해보자.

MariaDB는 오픈 소스의 관계형 데이터베이스(RDBMS)로 MySQL의 포크(fork)로 시작되어, MySQL과 API(Application Programming Interface) 및 ABI(Application Binary Interface) 호환성을 유지하면서도 독자적인 기능과 개선사항을 추가해 나가고 있다.
| 특징 | 내용 |
|---|---|
| MySQL과의 호환성 | MariaDB는 MySQL과의 높은 호환성을 유지하며 MySQL에서 MariaDB로의 전환은 매우 간단하다. |
| 개선된 성능 | MariaDB는 쿼리 최적화, 새로운 인덱스 및 스토리지 엔진, 병렬 복제 등 MySQl 대비 성능을 향상시킨 여러 기능을 제공한다. |
| 오픈 소스 | GPL v2 라이센스 하에 배포되어 누구나 자유롭게 사용, 수정, 배포할 수 있다. |
| 다양한 스토리지 엔진 지원 | MariaDB는 Aria, InnoDB, MyRocks, TokuDB등 다양한 스토리지 엔진을 지원하여, 사용자의 요구 사항에 맞게 데이터 저장 방식을 선택할 수 있다. |
| 활발한 커뮤니티 및 개발 | MariaDB는 활발한 커뮤니티와 지속적인 개발로 새로운 기능과 보안 패치를 꾸준히 제공하고 있다. |
GPL v2 라이센스는 간단하게 개발자가 무료로 공유했으니, 그걸 사용해 기술을 개발해도 무료로 공유해야 한다는 것으로 알면 된다.
MariaDB를 설치한 뒤 (root 계정 비밀번호는 꼭 기억해야 한다. + 포트번호도 안 겹치게.)
CLI 환경에서 켜 보았다.

하지만, GUI 환경에서 하는 것이 훨씬 편하기 때문에 HeidiSQL을 실행하겠다.


-- 현재 존재하는 데이터베이스 확인
SHOW databases;
-- mysql 데이터베이스로 계정 정보 확인하기
USE mysql; -- 기본 적으로 제공되는 mysql database
-- 1) 새로운 계정 만들기
CREATE USER '{계정이름}'@'%' IDENTIFIED BY '{계정비밀번호}'; -- 'localhost' 대신 '%'를 쓰면 외부 ip로 접속 가능
-- mysql database에서 user를 확인해 계정이 추가된 것을 확인한다.
SELECT * FROM user;
-- 2) 데이터베이스 생성 후 계정에 권한 부여
-- 데이터베이스(스키마) 생성
CREATE DATABASE menudb;
-- 계정의 권한 확인하기
SHOW GRANTS FOR '{계정이름}'@'%';
GRANT ALL PRIVILEGES ON menudb.* TO '{계정이름}'@'%'; -- menu에 대한 모든 권한 부여
이렇게 만든 계정에 권한을 주고 DB 스크립트를 사용해 확인해본다.


루트 계정에서 만든 계정으로 tbl_menu와 tbl_category 안에 있는 것들을 조회해보았다.


데이터는 더 많지만 일단은 사진에는 일부만 첨부했다.

Client / Server 통신
클라이언트에서 SQL 쿼리를 MariaDB 서버로 전송한다.
Query Parsing
MariaDB 서버가 쿼리를 받으면 쿼리를 Parsing 한다.
Parser(파서)는 SQL 문장을 이해할 수 있는 단위로 나누고 문법이 유효한지, 키워드가 올바른지, 사용한 컬럼 및 테이블이 존재하는지 등 확인하여 오류가 있으면 프로세스를 중단한다.
최적화 및 실행 계획 생성
Parsing이 완료되면, 쿼리 최적화기 (optimizer)가 작동해 쿼리를 효율적으로 실행하려고 한다.
-> 사용할 인덱스 결정, Join 순서, 데이터를 읽는 방법 등 = '실행계획' 형태로 생성
쿼리 실행
실행 계획에 따라, MariaDB 서버는 스토리지 엔진을 통해 필요한 데이터를 불러오거나 변경하고 실제 데이터베이스 파일 또는 인덱스에 접근한다.
결과 반환
쿼리 실행이 완료되면 MariaDB 서버는 결과 세트(Result Set)를 클라이언트에게 반환한다.
-> SELECT의 경우는 검색된 행들이 되고 INSERT, UPDATE, DELETE의 경우 영향을 받는 행의 수가 된다.
from 절 없는 select 해보기
SELECT 7 + 3;
SELECT 10 * 2; -- 사칙연산
SELECT 6 % 3, 6 % 4; -- 나머지
SELECT NOW(); -- os의 시간 나타내기
SELECT CONCAT('유', ' ', '관순'); -- 문자열 합하기
-- 별칭(alias)
SELECT 7 + 3 AS '합', 10 * 2 AS '곱';
SELECT NOW() AS '현재 시간';
SELECT 7 + 3 AS ' 합입니다.' -- 별칭을 달 때 특수기호가 있다면 싱글쿼테이션(')이 필수다.
select, from 절을 활용해보기
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu;
SELECT
category_code
, category_name
, ref_category_code
FROM tbl_category;
join 절 사용해보기
2개의 테이블을 연결해주는 join 절도 사용 가능하다.
SELECT
menu_name
, category_name
FROM tbl_menu m
JOIN tbl_category c ON m.category_code = c.category_code;
select, from, join, order by, group by, like 등 여러가지 문법에 대해서는 다음 게시글에 작성한다.