평소 테스트코드 활용 시 속도를 위해 SQLite를 주로 이용하는 편인데, 아무래도 실제 주로 사용하는 MySQL과 일부 다른 부분이 있다보니 유의해서 사용해야 할 필요가 있어 적어봅니다.
사실상 아래 요소 중 제일 유의해야 할 부분은 데이터유형 문제일 것 같고, 그중에서도 날짜 형식에 신경을 잘 써줘야겠습니다.
SQLite vs MySQL
- SQL 문법:
- SQLite는 LIMIT 절을 사용하여 쿼리에서 반환되는 행 수를 제한합니다. MySQL도 **LIMIT 절을 사용하지만 결과 집합의 시작 부분부터 오프셋을 지정하는 LIMIT ... OFFSET 구문도 지원합니다.
- SQLite는 와일드카드 문자 %와 함께 LIKE 연산자를 지원하지만, MySQL은 %와 _를 와일드카드 문자로 모두 지원합니다.
- SQLite는 큰따옴표(”)를 사용하여 열 및 테이블 이름을 둘러싸는 반면, MySQL은 백틱(```)을 사용합니다.
- 데이터 유형:
- SQLite는 모든 데이터 유형을 5가지 저장소 클래스 중 하나로 저장합니다: NULL, INTEGER, REAL, TEXT 또는 BLOB. MySQL에는 날짜, 시간 및 날짜 시간과 같은 보다 구체적인 데이터 유형이 있습니다.
- SQLite는 날짜 및 시간 값을 텍스트 문자열로 저장하는 반면, MySQL은 특정 날짜/시간 데이터 유형으로 저장합니다.
- SQLite에는 별도의 BOOLEAN 데이터 유형이 없습니다. 대신 부울 값을 정수로 저장합니다(거짓이면 0, 참이면 1). MySQL에는 별도의 BOOLEAN 데이터 유형이 있습니다.
- 트랜잭션:
- SQLite는 지연된 트랜잭션과 즉시 트랜잭션의 두 가지 유형을 지원합니다. 지연된 트랜잭션에서는 트랜잭션이 커밋될 때까지 변경 사항이 데이터베이스에 기록되지 않습니다. 즉시 트랜잭션에서는 변경 사항이 즉시 기록됩니다. MySQL은 잠금 및 다중 문 트랜잭션과 같은 고급 트랜잭션 기능을 지원합니다.
- 동시성:
- SQLite는 가벼운 파일 기반 데이터베이스 관리 시스템으로 설계되었으며 트래픽이 적고 가벼운 애플리케이션에 최적화되어 있습니다. MySQL은 더 크고 복잡한 데이터베이스와 동시성이 높은 애플리케이션을 처리하도록 설계되었습니다.
- 외래 키:
- SQLite는 외래 키 제약 조건을 지원하지만 기본적으로 사용하도록 설정되어 있지 않으므로 명시적으로 사용하도록 설정해야 합니다. MySQL도 외래 키 제약 조건을 지원하며 기본적으로 활성화되어 있습니다.
- 뷰:
- SQLite는 SELECT 문의 결과를 기반으로 하는 가상 테이블인 뷰를 지원합니다. MySQL도 뷰를 지원하지만 업데이트 가능한 뷰 및 뷰 병합과 같은 고급 기능이 있습니다.
- 저장 프로시저 및 트리거:
- MySQL은 데이터베이스 내에서 복잡한 로직을 실행할 수 있는 저장 프로시저 및 트리거를 지원합니다. SQLite는 저장 프로시저 또는 트리거를 지원하지 않습니다.
- 호환성:
- MySQL은 PHP, Python, Java 등 다양한 프로그래밍 언어에서 더 널리 사용되며 지원됩니다. SQLite는 덜 널리 지원되지만 PHP, Python, Ruby를 비롯한 많은 프로그래밍 언어에서 여전히 지원됩니다.