분류 sql

SQLite3 실습 튜토리얼

컨텐츠 정보

  • 조회 17 (작성일 )

본문

이 믿을 수 없을 정도로 강력하고 일반적인 데이터베이스로 시작하십시오. SQLite 치트 시트를 다운로드하십시오.


응용 프로그램은 종종 데이터를 저장합니다. 사용자가 간단한 텍스트 문서, 복잡한 그래픽 레이아웃, 게임 진행 또는 복잡한 고객 및 주문 번호 목록을 만드는 경우 소프트웨어는 일반적으로 데이터가 생성되고 있음을 의미합니다. 반복 사용을 위해 데이터를 저장하는 방법에는 여러 가지가 있습니다. 텍스트를 INI, YAML, XML 또는 JSON과 같은 구성 형식으로 덤프하거나 원시 바이너리 데이터를 작성하거나 구조화 된 데이터베이스에 데이터를 저장할 수 있습니다. SQLite는 데이터를 쉽게 생성, 구문 분석, 쿼리, 수정 및 전송할 수 있는 자체 포함 된 경량 데이터베이스입니다.


SQLite는 공개 도메인 전용이므로 기술적으로 저작권이 없으므로 라이센스가 필요하지 않습니다. 라이센스가 필요한 경우 소유권 보증을 구입할 수 있습니다. SQLite는 매우 일반적이며 약 1 조 개의 SQLite 데이터베이스가 활발하게 사용되고 있습니다. 이는 모든 Android 및 iOS 장치, 모든 macOS 및 Windows 10 컴퓨터, 대부분의 Linux 시스템, 모든 Webkit 기반 웹 브라우저, 최신 TV 세트, 자동차 멀티미디어 시스템 및 수많은 기타 소프트웨어 애플리케이션에서 여러 데이터베이스를 계산하고 있습니다.


요약하면 데이터를 저장하고 구성하는 데 사용할 수 있는 안정적이고 간단한 시스템입니다.


설치 


시스템에 이미 SQLite 라이브러리가 있지만 직접 사용하려면 명령 줄 도구가 설치되어 있어야 합니다. Linux에서는 이러한 도구가 이미 설치되어 있을 것입니다. 도구에서 제공하는 명령은 sqlite3입니다 (단지 sqlite가 아님).


Linux 또는 BSD에 SQLite를 설치하지 않은 경우 소프트웨어 저장소 또는 포트 트리에서 설치하거나 소스 코드 또는 컴파일 된 바이너리에서 다운로드하여 설치할 수 있습니다.


macOS 또는 Windows에서는 sqlite.org에서 SQLite 도구를 다운로드하여 설치할 수 있습니다.


SQLite 사용 


프로그래밍 언어를 통해 데이터베이스와 상호 작용하는 것이 일반적입니다. 이러한 이유로 Java, Python, Lua, PHP, Ruby, C ++ 및 기타 여러 가지를 위한 SQLite 인터페이스 (또는 "바인딩")가 있습니다. 그러나 이러한 라이브러리를 사용하기 전에 데이터베이스 엔진에서 실제로 일어나는 일과 데이터베이스 선택이 중요한 이유를 이해하는 데 도움이 됩니다. 이 기사에서는 SQLite 및 sqlite3 명령을 소개하므로 이 데이터베이스가 데이터를 처리하는 방법의 기본 사항에 익숙해 질 수 있습니다.


SQLite와 상호 작용 


sqlite3 명령을 사용하여 SQLite와 상호 작용할 수 있습니다. 이 명령은 데이터베이스를 보고 업데이트 할 수 있도록 대화형 셸을 제공합니다.


$ sqlite3
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 


이 명령은 SQLite 서브 쉘에 위치하므로 이제 프롬프트는 SQLite 프롬프트입니다. 일반적인 Bash 명령은 여기서 작동하지 않습니다. SQLite 명령을 사용해야 합니다. SQLite 명령 목록을 보려면 .help를 입력하십시오.


sqlite> .help
.archive ...             Manage SQL archives
.auth ON|OFF             SHOW authorizer callbacks
.backup ?DB? FILE        Backup DB (DEFAULT "main") TO FILE
.bail ON|off             Stop after hitting an error.  DEFAULT OFF
.binary ON|off           Turn BINARY output ON OR off.  DEFAULT OFF
.cd DIRECTORY            CHANGE the working directory TO DIRECTORY
[...] 


이러한 명령 중 일부는 바이너리이고 다른 명령에는 고유한 인수 (예 : 파일 이름, 경로 등)가 필요합니다. 이는 SQLite 셸에 대한 관리 명령이며 데이터베이스 쿼리가 아닙니다. 데이터베이스는 SQL (Structured Query Language)로 쿼리를 받고, 많은 SQLite 쿼리는 MySQL 및 MariaDB 데이터베이스에서 이미 알고 있는 것과 동일합니다. 그러나 데이터 유형과 기능이 다르므로 다른 데이터베이스에 익숙하다면 사소한 차이점에 주의를 기울이십시오.


데이터베이스 생성 


SQLite를 시작할 때 메모리에서 프롬프트를 열거나 열 데이터베이스를 선택할 수 있습니다.


sqlite3 mydatabase.db 


아직 데이터베이스가 없는 경우 SQLite 프롬프트에서 만들 수 있습니다.


sqlite> .open mydatabase.db 


이제 SQLite 데이터베이스로 사용할 준비가 된 빈 파일이 하드 드라이브에 있습니다. 파일 확장자 .db는 임의적입니다. .sqlite 또는 원하는 것을 사용할 수도 있습니다.


테이블 만들기 


데이터베이스에는 스프레드 시트로 시각화 할 수 있는 테이블이 있습니다. 일련의 행 (데이터베이스의 레코드라고 함)과 열이 있습니다. 행과 열의 교차를 필드라고 합니다.


SQL (Structured Query Language)은 제공되는 내용에 따라 이름이 지정됩니다. 유용한 결과를 얻기 위해 예측 가능하고 일관된 구문으로 데이터베이스 내용을 조회하는 방법. SQL은 약간 로봇식이라면 평범한 영어 문장과 매우 ​​비슷합니다. 현재 데이터베이스는 비어 있으며 테이블이 없습니다.


CREATE 쿼리를 사용하여 테이블을 만들 수 있습니다. 이를 IF NOT EXISTS 문과 결합하면 SQLite가 기존 테이블을 방해하는 것을 방지 할 수 있습니다.


SQLite에서 빈 테이블을 만들 수 없으므로 CREATE 문을 시도하기 전에 테이블에 저장할 데이터의 종류를 생각해야 합니다. 이 예에서는 다음 열이 있는 member라는 테이블을 생성합니다.

  • 고유 식별자
  • 사람의 이름
  • 데이터 입력 날짜 및 시간


고유 ID 


항상 고유 한 번호로 레코드를 참조하는 것이 좋습니다. 운 좋게도 SQLite는 이를 인식하고 rowid라는 열에서 자동으로 수행합니다.


이 필드를 만드는 데 SQL 문이 필요하지 않습니다.


데이터 유형 


예제 테이블의 경우 TEXT 데이터를 저장할 이름 열을 만듭니다. 지정된 필드에 데이터 없이 레코드가 생성되지 않도록 하려면 NOT NULL 지시문을 추가 할 수 있습니다.


이 필드를 만드는 SQL은 다음과 같습니다. name TEXT NOT NULL


SQLite에는 5 가지 데이터 유형 (실제로 스토리지 클래스)이 있습니다.

  • TEXT: a text string
  • INTEGER: a whole number
  • REAL: a floating point (unlimited decimal places) number
  • BLOB: binary data (for instance, a .jpeg or .webp image)
  • NULL: a null value

날짜 및 시간 스탬프 


SQLite에는 편리한 날짜 및 타임 스탬프 기능이 포함되어 있습니다. 그것은 데이터 유형 자체가 아니라 원하는 형식에 따라 문자열 또는 정수를 생성하는 SQLite의 함수입니다. 이 예에서는 기본값으로 두었습니다.


이 필드를 생성하기 위한 SQL은 다음과 같습니다. datetamp DATETIME DEFAULT CURRENT_TIMESTAMP


테이블 생성 SQL 


SQLite에서 이 예제 테이블을 생성하기 위한 전체 SQL :


sqlite> CREATE TABLE
...> IF NOT EXISTS
...> member (name TEXT NOT NULL,
...> datestamp DATETIME DEFAULT CURRENT_TIMESTAMP 


이 코드 샘플에서는 읽기 쉽도록 명령문의 논리 절 뒤에 있는 Return 키를 눌렀습니다. SQLite는 세미콜론 (;)으로 끝나지 않는 한 명령을 실행하지 않습니다.


SQLite 명령 .tables를 사용하여 테이블이 생성되었는지 확인할 수 있습니다.


sqlite> .tables
member 


테이블의 모든 열보기 


PRAGMA 문을 사용하여 테이블에 포함 된 열과 행을 확인할 수 있습니다.


sqlite> PRAGMA table_info(member);
0|name|TEXT|1||0
1|datestamp|CURRENT_TIMESTAMP|0||0 


Data entry 


INSERT SQL 키워드를 사용하여 몇 가지 샘플 데이터로 새 테이블을 채울 수 있습니다.


> INSERT INTO member (name) VALUES ('Alice');
> INSERT INTO member (name) VALUES ('Bob');
> INSERT INTO member (name) VALUES ('Carol');
> INSERT INTO member (name) VALUES ('David'); 


테이블의 데이터를 확인하십시오.


> SELECT * FROM member;
Alice|2020-12-15 22:39:00
Bob|2020-12-15 22:39:02
Carol|2020-12-15 22:39:05
David|2020-12-15 22:39:07 


한 번에 여러 행 추가 


이제 두 번째 테이블을 만듭니다.


> CREATE TABLE IF NOT EXISTS linux (
...> distro TEXT NOT NULL) 


이번에는 작은 VALUES 단축키를 사용하여 몇 가지 샘플 데이터로 채워서 하나의 명령으로 여러 행을 추가 할 수 있습니다. VALUES 키워드는 괄호 안에 목록이 있어야 하지만 쉼표로 구분 된 여러 목록을 사용할 수 있습니다.


> INSERT INTO linux (distro)
...> VALUES ('Slackware'), ('RHEL'),
...> ('Fedora'),('Debian'); 


테이블 변경 


이제 두 개의 테이블이 있지만 아직 두 테이블 사이에는 관계가 없습니다. 각각 독립적 인 데이터를 포함하지만 첫 번째 테이블의 멤버를 두 번째에 나열된 특정 항목에 연결해야 할 수도 있습니다.


이를 위해 두 번째 테이블에 해당하는 첫 번째 테이블에 대한 새 열을 만들 수 있습니다. 두 테이블 모두 고유 식별자 (SQLite 덕분에 자동)로 설계 되었기 때문에 두 테이블을 연결하는 가장 쉬운 방법은 하나의 rowid 필드를 다른 테이블에 대한 선택기로 사용하는 것입니다.


두 번째 테이블의 값을 나타내는 첫 번째 테이블에 새 열을 만듭니다.


> ALTER TABLE member ADD os INT; 


Linux 테이블의 고유 ID를 사용하여 각 구성원에 분배를 지정하십시오. 레코드가 이미 존재하므로 INSERT 대신 UPDATE SQL 키워드를 사용합니다. 특히, 한 행을 선택한 다음 한 열의 값을 업데이트하려고합니다. 구문 적으로 이것은 업데이트가 먼저 발생하고 선택 일치가 마지막에 발생하여 약간 반대로 표현됩니다.


> UPDATE member SET os=1 WHERE name='Alice'; 


멤버 테이블의 다른 이름에 대해 이 프로세스를 반복하여 데이터로 채 웁니다. 다양성을 위해 네 행에 걸쳐 세 가지 다른 분포를 할당합니다 (하나에 두 배로 증가).


Joining tables 


이제 이 두 테이블이 서로 관련되어 있으므로 SQL을 사용하여 관련 데이터를 표시 할 수 있습니다. 데이터베이스에는 여러 종류의 조인이 있지만 기본 사항을 알고 나면 모두 시도해 볼 수 있습니다. 다음은 구성원 테이블의 os 필드에서 찾은 값을 Linux 테이블의 id 필드와 연관 시키는 기본 조인입니다.


> SELECT * FROM member INNER JOIN linux ON member.os=linux.rowid;
Alice|2020-12-15 22:39:00|1|Slackware
Bob|2020-12-15 22:39:02|3|Fedora
Carol|2020-12-15 22:39:05|3|Fedora
David|2020-12-15 22:39:07|4|Debian 


os 및 id 필드가 조인을 형성합니다.


그래픽 응용 프로그램에서 os 필드가 드롭 다운 메뉴로 설정 될 수 있다고 상상할 수 있습니다.이 값은 Linux 테이블의 distro 필드 내용에서 가져온 값입니다. 고유하지만 관련된 데이터 세트에 대해 별도의 테이블을 사용하여 데이터의 일관성과 유효성을 보장하고 SQL 덕분에 나중에 동적으로 연결할 수 있습니다.


더 알아보기 


SQLite는 무한히 유용한 독립형, 이식 가능한 오픈 소스 데이터베이스입니다. 대화식으로 사용하는 방법을 배우는 것은 웹 애플리케이션 용으로 관리하거나 프로그래밍 언어 라이브러리를 통해 사용하기 위한 훌륭한 첫 번째 단계입니다.


SQLite를 좋아한다면 같은 저자인 Richard Hipp 박사의 Fossil을 사용해 볼 수도 있습니다.


SQLite를 배우고 사용할 때 근처에 일반적인 명령 목록이 있으면 도움이 될 수 있으므로 오늘 SQLite3 치트 시트를 다운로드하세요!


https://opensource.com/article/21/2/sqlite3-cheat-sheet