웹사이트 검색

Sqlite를 사용하는 방법 및 시기


참고: 이 튜토리얼에서는 더 이상 사용되지 않는 Ubuntu 버전을 사용합니다. Ubuntu 20.04용으로 작성된 업데이트된 버전을 읽으려면 여기를 클릭하십시오.

Sqlite는 매우 간단하고 빠른 오픈 소스 SQL 엔진입니다. 이 튜토리얼에서는 Mysql이나 Postgres와 같은 완전한 RDBMS와 달리 Sqlite를 사용하는 것이 최적일 때와 이를 설치하는 방법 및 CRUD(Create, Read, Update 및 Delete)를 다루는 기본 사용 예제를 설명합니다.

오해

Sqlite가 테스트 및 개발 전용이라는 생각에 속지 마십시오. 예를 들어, 하루에 최대 100,000개의 조회수를 수신하는 웹 사이트에 대해 잘 작동하며 이는 보수적인 제한입니다. Sqlite 데이터베이스의 최대 크기는 140테라바이트(이 정도면 충분하지 않습니까?)이며 완전한 RDBMS보다 훨씬 더 빠를 수 있습니다. 전체 데이터베이스와 기타 필요한 모든 데이터는 호스트 파일 시스템의 일반 파일에 저장되므로 별도의 서버 프로세스가 필요하지 않습니다(느린 프로세스 간 통신에 대한 모든 필요성 제거).

VPS에서 최적의 사용

Sqlite는 단순성에 중점을 둡니다. 완전히 내부에 있기 때문에 종종 대안보다 훨씬 빠릅니다. 이식성(언어 및 플랫폼 모두와 관련하여), 단순성, 속도 및 작은 메모리 공간을 찾고 있다면 Sqlite가 이상적입니다. 그 단점은 높은 읽기 또는 쓰기 동시성이 필요한 경우에만 명백합니다. Sqlite는 한 번에 하나의 작성자만 지원할 수 있으며 일반적으로 높은 파일 시스템 대기 시간은 많은 클라이언트가 Sqlite 데이터베이스에 동시에 액세스해야 하는 경우 불편할 수 있습니다. 마지막 가능한 단점은 구문이 다른 SQL 시스템과 유사하지만 고유하다는 것입니다. 다른 시스템으로 이동하는 것은 매우 사소한 일이지만 Sqlite를 '초과'하면 전환과 관련된 약간의 오버헤드가 발생합니다.

자세한 내용은 공식 문서에 Sqlite의 장단점에 대한 아주 좋은 개요가 있습니다.

VPS에 Sqlite 설치

sqlite3 모듈은 표준 Python 라이브러리의 일부이므로 표준 Ubuntu 설치 또는 Python이 설치된 모든 시스템에서 추가 설치가 반드시 필요합니다. Ubuntu에 Sqlite 명령줄 인터페이스를 설치하려면 다음 명령을 사용합니다.

sudo apt-get update
sudo apt-get install sqlite3 libsqlite3-dev

소스에서 컴파일해야 하는 경우 공식 SQLite 웹사이트에서 최신 autoconf 버전을 가져옵니다. 작성 당시:

wget http://sqlite.org/2013/sqlite-autoconf-3080100.tar.gz
tar xvfz sqlite-autoconf-3080100.tar.gz
cd sqlite-autoconf-3080100
./configure
make
make install

(소스에서 빌드에 대한 참고 사항: 1) 이미 설치된 버전과 새로 설치된 버전 간의 충돌로 인해 "헤더 및 소스 버전 불일치\ 오류가 발생할 수 있으므로 표준 Ubuntu 설치에서는 이 작업을 수행하지 마십시오. . 2) make 명령이 추가 입력을 기대하는 것 같으면 소스를 컴파일하는 데 시간이 걸릴 수 있으므로 잠시만 기다려 주십시오.

기본 명령줄 인터페이스 사용

데이터베이스를 만들려면 다음 명령을 실행합니다.

sqlite3 database.db

여기서 '데이터베이스'는 데이터베이스의 이름입니다. database.db 파일이 이미 존재하는 경우 Sqlite는 해당 파일에 대한 연결을 엽니다. 존재하지 않으면 생성됩니다. 다음과 유사한 출력이 표시됩니다.

SQLite version 3.8.1 2013-10-17 12:57:35
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

이제 테이블을 만들고 데이터를 삽입해 보겠습니다. \와인\이라는 이 테이블에는 4개의 열이 있습니다. ID, 와인 생산자, 와인 종류 및 와인 원산지 국가입니다. 아직 금요일이 아니므로 데이터베이스에 3개의 와인만 삽입합니다.

CREATE TABLE wines (id integer, producer varchar(30), kind varchar(20), country varchar(20)); 
INSERT INTO WINES VALUES (1, "Rooiberg", "Pinotage", "South Africa");
INSERT INTO WINES VALUES (2, "KWV", "Shiraz", "South Africa");
INSERT INTO WINES VALUES (3, "Marks & Spencer", "Pinot Noir", "France");

데이터베이스, 테이블 및 일부 항목을 만들었습니다. 이제 Ctrl + D를 눌러 Sqlite를 종료하고 다음을 입력합니다(다시 'database'를 데이터베이스 이름으로 대체). 그러면 방금 만든 데이터베이스에 다시 연결됩니다.

sqlite3 database.db

이제 다음을 입력하십시오.

SELECT * FROM wines;

방금 만든 항목이 표시되어야 합니다.

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|France

엄청난. 그것은 만들고 읽는 것입니다. 업데이트 및 삭제를 수행해 보겠습니다.

UPDATE wines SET country="South Africa" WHERE country="France";

데이터베이스를 업데이트하여 프랑스에서 온 것으로 나열된 모든 와인이 대신 남아프리카에서 오는 것으로 나열됩니다. 다음을 사용하여 결과를 확인하십시오.

SELECT * FROM wines;

다음을 확인해야 합니다.

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

이제 우리의 모든 와인은 남아프리카에서 생산됩니다. 축하의 의미로 KWV를 마시고 데이터베이스에서 삭제합시다.

DELETE FROM wines WHERE id=2;
SELECT * FROM wines;

그리고 셀러에 나열된 와인이 하나 더 적어야 합니다.

1|Rooiberg|Pinotage|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

여기에는 모든 기본 데이터베이스 작업이 포함됩니다. 마치기 전에 두 개의 테이블과 기본 조인을 사용하는 (약간) 덜 간단한 예를 하나 더 시도해 보겠습니다.

Ctrl + D 명령을 사용하여 Sqlite를 종료하고 sqlite3 database2.db를 사용하여 새 데이터베이스에 다시 연결합니다.

우리는 매우 유사한 wines 테이블과 국가 이름 및 현재 대통령을 저장하는 countries 테이블도 생성할 것입니다. 먼저 국가 테이블을 만들고 남아공과 프랑스를 다음과 같이 삽입합니다(한 번에 여러 줄의 sqlite 코드를 복사하여 붙여넣을 수 있음).

CREATE TABLE countries (id integer, name varchar(30), president varchar(30));
INSERT INTO countries VALUES (1, "South Africa", "Jacob Zuma");
INSERT INTO countries VALUES(2, "France", "Francois Hollande");

그런 다음 다음을 사용하여 와인 테이블을 다시 만들 수 있습니다.

CREATE TABLE wines (id integer, kind varchar(30), country_id integer);
INSERT INTO wines VALUES (1, "Pinotage", 1);
INSERT INTO wines VALUES (2, "Shiraz", 1);
INSERT INTO wines VALUES (3, "Pinot Noir", 2);

이제 남아공에는 어떤 종류의 와인이 있는지 살펴보겠습니다.

SELECT kind FROM wines JOIN countries ON country_id=countries.id WHERE countries.name="South Africa";

다음을 확인해야 합니다.

Pinotage
Shiraz

그리고 기본 조인을 다룹니다. Sqlite는 당신을 위해 많은 일을 합니다. 위의 조인 문에서는 JOIN 키워드만 사용하지만 기본값은 INNER JOIN입니다. 또한 모호하지 않기 때문에 wines.country_id를 지정할 필요가 없습니다. 반면에 다음 명령을 시도하면

SELECT kind FROM wines JOIN countries ON country_id=id WHERE country_id=1;

오류 메시지 오류: 모호한 열 이름: id가 표시됩니다. 두 테이블 모두 id 열을 가지고 있으므로 충분히 공평합니다. 그러나 일반적으로 Sqlite는 상당히 관대합니다. 오류 메시지는 문제를 찾아 수정하는 것을 매우 사소하게 만드는 경향이 있으며 이는 개발 프로세스 속도를 높이는 데 도움이 됩니다.

구문에 대한 추가 도움말을 보려면 대부분의 조인 유형에 대한 유용한 개요가 포함된 자습서 링크를 참조하십시오.

마지막으로 Sqlite에는 모든 주요 언어로 된 래퍼와 드라이버가 있으며 대부분의 시스템에서 실행할 수 있습니다. [많은 목록은 여기에서 찾을 수 있습니다](http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers target=_blank).