Information Security ˗ˋˏ ♡ ˎˊ˗

OS/Database

[DBMS] SQLite 정의 및 사용법(with Docker)

토오쓰 2021. 6. 15. 17:24

 

MySQL이나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만,

서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이며,

안드로이드에서 제공하는 애플리케이션 DB의 한 종류이다.

 

특징

1) 내장 가능한 오픈소스 Database로 C언어로 개발되었고 일반적인 SQL로 쿼리가 가능하다.

2) 작고 빠르며 독립적이다.

3) 신뢰성이 높고 파일 형식은 안정적이며 크로스 플랫폼이다.

- 크로스 플랫폼: 다양한 플랫폼에서 사용할 수 있다는 뜻

4) 역 호환이 가능하며, DB 파일을 일반적으로 시스템 간에 풍부한 콘텐츠를 제공하기 위한 컨테이너로 사용한다.

5) 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 Database이다.

- SQLite를 이용한 데이터는 파일에 저장되고 data/data/패키지명/databases 경로의 디렉터리에 저장된다

 

Pragma문

- SQLite 라이브러리의 조작을 수정하거나 내부 (테이블이 아닌) 데이터에 대한 SQLite 라이브러리를 조회하는 데 사용된다. 해당 명령은 SQLite에만 적용되고 다른 SQL 데이터베이스 엔진과 호환되지 않는다.

 

Journal Mode

- SQLite에서는 Rollback Journal 방식을 통해 트랜잭션을 구현한다. 사실 Journaling 예기치 않은 DB 혹은 서버 에러에도 데이터 유실 혹은 파일 손상을 방지하기 위해, 문제 발생 원래 데이터로 복원하고자 하는데 목적이 있다.

- SQLite Journaling 특징을 사용하여 트랜잭션을 사용할 있도록 제공하는 것이다.

 

쿼리문

sqlite> pragma journal_mode = TRUNCATE; //journal mode 변경

 

SQLite에서 Journal Mode 종류

  1. DELETE (Default)
    Rollback Journal File을 매번 Create/Delete
  2. TRUNCATE
    Rollback Journal을 매번 Create/Delete하지 않고, 파일 사이즈만 0으로 설정 후 재활용
  3. MEMORY
    저널링 파일을 메모리에서 유지. SQLite를 사용하는 애플리케이션 장애 시 데이터 유실
  4. PERSIST
    저널링 파일을 지우지 않음.
  5. NONE
    데이터 파일에 직접 기록(문제 발생 시 데이터 복원 불가)

 

MYSQL과 SQLite의 차이점

MySQL SQLite
여러 개의 작업과 사용자의 sql을 처리할 수 있도록 구현돼 있다. 로컬에서 혼자 사용하는 용도
서버에 올려놓고 많은 요청을 처리하기에는 한계가 있다

 

SQLCipher

SQLite 데이터를 인간이 알아볼 수 없도록 암호화하여 관리한다.

아래 깃허브로 설치

https://github.com/sqlitebrowser/sqlitebrowser/wiki/Win64-setup-%E2%80%94-Compiling-SQLCipher

 

sqlitebrowser/sqlitebrowser

Official home of the DB Browser for SQLite (DB4S) project. Previously known as "SQLite Database Browser" and "Database Browser for SQLite". Website at: - sqlitebrowser/sqlitebr...

github.com

설치하여 암호화/복호화할 수 있고 Key값을 주고 테이블을 만들고 데이터를 입력하는 방식

 

 

 

SQLite 사용법

데이터베이스 확인하기

.database

 

테이블 생성

CREATE TABLE db_list (id INTEGER, name VARCHAR(16));

 

테이블 확인

.tables

 

 

레코드 추가

INSERT INTO db_list (id, name) VALUES(303, "Windows");

 

 

테이블의 레코드 참조

SELECT * FROM db_list;

 

 

테이블에서 조건식으로 데이터 검색

SELECT * FROM db_list WHERE id=303;

 

레코드 삭제

DELETE FROM db_list WHERE id=303;

 

 

테이블 삭제

DELETE FROM db_list;

 

 

버전 확인

select sqlite_version();

 

 

 

 

참고

https://onlyfor-me-blog.tistory.com/45

https://gywn.net/2013/08/let-me-intorduce-sqlite/

 

명령어

https://hermeslog.tistory.com/181