Menu

SQLite CLI 사용법: sqlite3 명령줄 셸 완벽 정리

터미널을 벗어나지 않고 sqlite3 셸로 DB 열기, 쿼리 실행, 닷 명령어 활용, CSV 가져오기와 내보내기까지 한 번에 정리했습니다.

이 페이지에는 실행 가능한 에디터가 있습니다 — 편집하고 실행하면 결과를 바로 볼 수 있습니다.

SQLite CLI란?

sqlite3는 SQLite와 함께 배포되는 공식 명령줄 셸입니다. 데이터베이스 파일을 열고 프롬프트를 띄워 SQL을 바로 실행할 수 있게 해주죠. 서버도, 로그인도, 설정 파일도 필요 없습니다. 그냥 실행 파일 하나와 DB 파일만 있으면 끝입니다.

이 sqlite 명령줄 셸은 빠르게 데이터를 확인하거나, 일회성 쿼리를 던지거나, 스키마를 덤프하거나, 데이터를 임포트할 때 유용합니다. 애플리케이션 코드를 작성하지 않고도 데이터베이스를 들여다볼 수 있는 가장 빠른 방법이에요.

$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite>

mydata.db 파일이 아직 없어도 걱정할 필요 없습니다. 처음 변경 사항이 발생하는 순간 SQLite가 자동으로 파일을 만들어 줍니다. 파일명 없이 그냥 sqlite3만 실행하면 메모리에만 존재하는 임시 DB가 열립니다.

SQLite 명령줄 셸에서 SQL 실행하기

셸에 진입했다면 SQL을 입력하고 문장 끝에 꼭 세미콜론을 붙여 주세요. 셸은 세미콜론이 들어올 때까지 기다리기 때문에, 세미콜론 없이 Enter를 누르면 다음 줄 입력을 기다리는 연속 프롬프트(...>)가 나타납니다.

세미콜론(;)은 "입력 끝났으니 실행해 줘"라는 신호입니다. 빠뜨리면 셸이 ...> 프롬프트를 띄운 채 가만히 기다립니다. 이럴 땐 새 줄에 ;만 입력하면 마무리됩니다.

SQL이 아닌 sqlite dot command

.으로 시작하는 명령어는 모두 dot command, 즉 SQL 엔진이 아니라 셸 자체에 내리는 지시입니다. 세미콜론도 붙이지 않고, 오직 sqlite3 셸 안에서만 동작합니다.

sqlite> .tables
books

sqlite> .schema books
CREATE TABLE books (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  year INTEGER
);

sqlite> .help

자주 쓰게 되는 건 결국 몇 개 안 됩니다:

  • .tables — 현재 데이터베이스에 있는 테이블을 모두 나열합니다.
  • .schema [table] — 특정 테이블 하나 또는 전체의 CREATE TABLE 문을 보여줍니다.
  • .databases — 연결되어 있는 데이터베이스 파일 목록을 출력합니다.
  • .mode <format> — 쿼리 결과의 출력 형식을 바꿉니다.
  • .headers on — 쿼리 결과 위에 컬럼 이름을 함께 표시합니다.
  • .read file.sql — SQL 파일을 실행합니다.
  • .exit 또는 .quit — 셸을 빠져나옵니다.

전체 목록은 .help로 확인할 수 있습니다. 수십 개가 있지만, 실제로 손에 익는 건 열 개 남짓입니다.

결과를 보기 좋게 출력하기

기본 출력 형식은 파이프(|) 구분에 헤더도 없습니다. 스크립트로 처리할 땐 괜찮지만, 눈으로 읽기엔 영 불편하죠. 다음 두 dot command면 깔끔하게 해결됩니다:

sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM books;
id  title        year
--  -----------  ----
1   Dune         1965
2   Neuromancer  1984

그 외에 자주 쓰는 모드는 다음과 같습니다.

  • .mode box — 유니코드 테두리로 표를 그려줍니다. 스크린샷 찍기에 좋습니다.
  • .mode csv — 쉼표로 구분된 형식으로, 다른 도구에 파이프로 넘길 때 유용합니다.
  • .mode json — JSON 형식으로 출력하며, 행마다 객체 하나씩 만들어집니다.
  • .mode line — 한 줄에 컬럼 하나씩 보여줘서, 행이 길 때 보기 편합니다.

이런 설정들은 셸을 다시 띄우면 초기화됩니다. 매번 적용되게 하려면 ~/.sqliterc 파일에 적어두세요. sqlite3가 시작할 때 자동으로 읽어 들입니다.

sqlite csv import와 export

sqlite 명령줄 셸은 CSV를 기본으로 지원합니다. CSV 모드로 바꾼 다음 .import 명령으로 파일을 테이블에 넣으면 됩니다.

sqlite> .mode csv
sqlite> .import authors.csv authors
sqlite> SELECT * FROM authors LIMIT 3;

테이블이 없으면 .import가 첫 번째 행을 컬럼명으로 사용해 새 테이블을 만들어 줍니다. 이미 존재하는 테이블이라면 첫 행도 데이터로 처리되니, 헤더를 건너뛰고 싶다면 --skip 1 옵션을 함께 넘기면 됩니다.

반대로 데이터를 파일로 빼낼 때는 출력 결과를 파일로 리다이렉트하면 됩니다:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output books.csv
sqlite> SELECT * FROM books;
sqlite> .output stdout

.output filename을 입력하면 그 이후 실행되는 모든 쿼리 결과가 해당 파일로 저장되고, .output stdout으로 되돌릴 때까지 유지됩니다. CSV든 JSON이든, 스키마 덤프든 동일한 방식으로 동작합니다.

SQL 파일 실행하기

문장이 몇 줄을 넘어가면 SQL을 파일로 저장해서 실행하는 게 편합니다. 셸 안에서는 다음과 같이 실행합니다:

sqlite> .read setup.sql

셸에 들어가지 않고 일반 터미널에서 바로 실행할 수도 있습니다:

$ sqlite3 mydata.db < setup.sql
$ sqlite3 mydata.db "SELECT count(*) FROM books;"

두 번째 방식은 쿼리 하나만 실행하고 바로 종료되기 때문에, 셸 스크립트나 간단히 값만 확인할 때 쓰기 딱 좋습니다. 출력 형식을 다듬고 싶다면 -cmd 플래그로 .mode 설정을 함께 넘기면 됩니다:

$ sqlite3 -header -column mydata.db "SELECT * FROM books;"

처음 보는 데이터베이스 살펴보기

누군가 .db 파일을 툭 건네주는데 안에 뭐가 들었는지 전혀 모를 때, 보통 이런 순서로 확인합니다:

$ sqlite3 mystery.db
sqlite> .tables
sqlite> .schema
sqlite> .indexes
sqlite> SELECT count(*) FROM some_table;

.schema를 인자 없이 실행하면 파일에 들어 있는 모든 CREATE TABLE, CREATE INDEX, CREATE TRIGGER 문이 한꺼번에 출력됩니다. .indexes는 테이블별 인덱스 목록을 보여주죠. 솔직히 셸에서 5분만 만져보면 어지간한 README보다 데이터베이스 구조를 훨씬 빠르게 파악할 수 있습니다.

다른 곳에서도 그대로 재현할 수 있는 텍스트 스냅샷을 만들고 싶다면 .dump를 쓰면 됩니다:

sqlite> .output backup.sql
sqlite> .dump
sqlite> .output stdout

그러면 sqlite3로 다시 읽어 들였을 때 스키마와 데이터까지 통째로 복원할 수 있는 SQL 스크립트가 만들어집니다.

sqlite3 셸 종료하기

종료하는 방법은 세 가지가 있고, 어느 쪽을 써도 결과는 같습니다:

sqlite> .exit
sqlite> .quit

macOS와 Linux에서는 Ctrl+D, Windows에서는 Ctrl+Z를 누른 뒤 Enter를 눌러도 됩니다. 별도로 저장할 필요는 없어요. 명시적으로 트랜잭션을 시작하지 않았다면 SQLite는 각 문장이 실행될 때마다 자동으로 커밋합니다.

다음 단계: SQLite GUI 도구

CLI는 빠르고 스크립트로 자동화하기에 좋지만, 때로는 테이블을 클릭으로 둘러보고, 컬럼을 정렬하고, 행을 시각적으로 편집하고 싶을 때가 있죠. SQLite용으로 쓸 만한 GUI 도구가 몇 가지 있는데, 다음 페이지에서 살펴보겠습니다.

자주 묻는 질문

SQLite CLI로 데이터베이스는 어떻게 여나요?

터미널에서 sqlite3 mydata.db를 실행하면 됩니다. 해당 파일이 없으면 첫 테이블을 만드는 순간 SQLite가 자동으로 파일을 생성해 줍니다. 파일명 없이 sqlite3만 입력하면 임시 인메모리 DB가 열리고, 종료 시 내용은 모두 사라집니다.

sqlite3 셸은 어떻게 종료하나요?

.exit 또는 .quit을 입력하고 Enter를 누르세요. 둘 다 동일하게 동작합니다. 대부분의 환경에서는 Ctrl+D(윈도우라면 Ctrl+Z 후 Enter)로도 셸을 빠져나올 수 있습니다.

SQLite의 닷 명령어(dot command)가 뭔가요?

.으로 시작하는 셸 내장 명령어입니다. .tables, .schema, .mode, .import 같은 것들이 대표적이죠. SQL이 아니라 CLI 자체에 내리는 지시이기 때문에 끝에 세미콜론을 붙이지 않으며, sqlite3 셸 안에서만 동작합니다.

SQL 파일을 SQLite CLI에서 실행하려면 어떻게 하나요?

셸 안에서는 .read filename.sql을 사용하고, 셸 밖에서는 sqlite3 mydata.db < filename.sql처럼 파이프로 넘기면 됩니다. 두 방식 모두 파일 안의 SQL 문을 순서대로 현재 DB에 실행합니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기