MariaDB 개요
주요 특성
- SQL 문법
MariaDB는 ANISI SQL을 사용하며, Oracle DBMS의 T-SQL은 지원되지 않는다. (예: (+))
- Built-in 함수
Built-in 함수들은 DBMS마다 다르며, MariaDB에서만 사용 가능한 Built-in 함수들이 있다.
- 스토리지 엔진
MariaDB는 여러가지 스토리지 엔진(Storage Engine)을 사용할 수 있으며, 스토리지 엔진에 따라서 지원되는 트랜잭션의 범위, Locking level 등에 차이가 있다.
다양한 스토리지 엔진 중에 InnoDB 스토리지 엔진과 MyISAM 스토리지 엔진이 가장 많이 사용된다.
- 트랜잭션
MariaDB는 시스템변수를 이용해서 트랜잭션 격리수준(transaction isolation)과 자동커밋(autocommit)여부를 설정할 수 있으며, 설정에 따라 적용되는 트랜잭션 수준에 차이가 있다.
- View, Procedure, Function
뷰, 프로시저, 함수 등을 생성하면 해당 객체를 만든 definer(선언자)가 반드시 지정되며, 해당 객체를 사용할 때는 definer(선언자)와 invoker(실행자) 중에 어떤 사용자의 권한을 이용할지 설정해야 한다.
Oracle DBMS 대비 MariaDB의 제한
Oracle DB와 비교했을 때 Oracle에서는 사용했었으나 MariaDB에서는 사용할 수 없는 기능들이 있다.
- 빈문자('' = empty string)와 NULL은 다른 값으로 판단한다.
- 문자타입에서 끝부분 공백은 자동으로 잘려서 처리되는 경우가 있다.
- View 내부분의 FROM 절에는 서브쿼리를 사용할 수 없다.
- WITH절: View를 만들어서 중복 기술하여 대체해야 한다.
- Connect By절: 재귀쿼리를 만들 수 없으므로 프로그램에서 기능을 개발해야 한다.
- Sequence: 테이블의 auto_increment 옵션을 사용하거나 유사 함수를 개발해서 사용해야 한다.
- Synonym: Synonym은 존재하지 않으므로 “스키마.테이블” 형태로 사용하던가, USE 문을 이용해서 스키마을 명시한 후에 테이블을 사용한다.
- ROWNUM: 페이징 및 부분범위 처리는 LIMIT을 이용하게 한다. 쿼리문 내부에 ROWNUM은 지원하지 않는다.
- ROWID: rowid라는 개념이 전혀 존재하지 않으므로 ROWID를 사용하던 프로그램은 PK를 이용하도록 해야 한다.
- DB Link: DB Link 기능이 없으므로 MQ나 웹서비스 등으로 기능을 개발할 것을 권장한다.
- alias: 모든 inline view에는 alias가 필수이다.
- 분석함수: COUNT(*) OVER (), SUM() OVER ()와 같은 분석함수 기능은 지원하지 않는다.
- Parallel 힌트를 이용한 쿼리의 병렬 실행을 지원하지 않는다.
- UTL_SMTP: DB에서 자체적으로 메일을 보내는 기능은 MariaDB에는 구현 돼 있지 않다.