포스트

Ubuntu에서 sqlite 설치하고 CRUD하기.

안녕하세요, 요새 7월 말은 날씨가 참 무더운 여름인 것 같습니다.. 카페에 가서 차가운 음료 한 잔을 마시는 일이 저의 작은 낙입니다. ㅋㅋ

sticker


그런데 여러분들이 잘 아시는 mysql, postgresql, sql server 등 '서버/클라이언트' 구조를 가진 데이터베이스와는 다른 sqlite에 대해서도 혹시 아시나요? sqlite는 매우 간단한 데이터베이스 구현을 목적으로 만들어진 오픈소스 데이터베이스입니다. 용량도 작고 기능도 적습니다. 따라서 모바일용 데이터베이스로 많이 쓰인다고 합니다.

이번 포스팅에서는 sqlite에 대해 알아보고자 합니다.

Install

sqlite의 데이터베이스 파일 확장명은 '.sqlite'입니다. ubuntu에서는 이 데이터베이스를 어떻게 열 수 있을까요? 먼저 sqlite를 다음 명령어로 설치해줍니다.

1
2
3
sudo apt update
sudo apt install sqlite3
sqlite3 --version

이제 sqlite에서 새로운 db를 만들고 table도 생성해봅시다. '.sqlite'확장자는 sqlite에서 개발한 데이터베이스 형식입니다. sqlite3을 통해 만든다면 '.db'와 동일하게 사용할 수 있습니다.

1
2
3
sqlite3 my_example_db.sqlite
혹은,
sqlite3 my_example_db.db

Create

table을 생성해봅시다.

1
create table tbl1(my_first_column varchar(10), my_second_column smallint);

두 개의 컬럼을 만들었습니다.

Select

SELECT 명령어로 만든 table을 확인해보겠습니다.

1
SELECT * FROM sqlite_master WHERE type='table';

잘 보이도록 아래와 같이 옮겨봤습니다. 제가 만든 table이 2개의 컬럼이 있고 어떤 명령어로 만들어졌는지 알 수 있네요.

1
table|tbl1|tbl1|2|CREATE TABLE tbl1(my_first_column varchar(10), my_second_column smallint)

Insert

데이터를 입력해봅시다. 형식에 맞는 아무 데이터나 입력했습니다.

1
2
3
INSERT INTO tbl1 VALUES('TOM', 10);
INSERT INTO tbl1 VALUES('ALLEN', 11);
INSERT INTO tbl1 VALUES('JASON', 15);

잘 입력되었는지 확인해봅시다.

1
SELECT * FROM tbl1;

잘 입력이 되었군요!

Delete

이제 삭제를 해봅시다. DELETE 를 써서 이름이 'my_second_column'이 12보다 큰 데이터를 삭제하려 합니다.

1
DELETE FROM tbl1 WHERE my_second_column > 12;

삭제가 잘 되었네요. :)

이제 좀더 연습해볼까요?

저는 이제 같이 만든 tbl1 말고 다른 db를 열어보려고 합니다. 혹시 가지고 있는, 열고자 하는 db가 있다면 있는 경로로 이동하시거나, 절대경로('/'로 시작하는 경로)로 입력하시면 되겠습니다. 저는 절대경로로 열겠습니다.

열고자 하는 데이터베이스가 만일 'my_db.sqlite' 라면 다음과 같은 명령어로 열 수 있습니다.

1
sqlite3 /{경로}/my_db.sqlite

table이 뭐가 있는지도 검색해봅시다.

1
.table

제가 열어본 db에는 'Accounts', 'Inventort', 'PlacedObjects' 라는 3가지 테이블이 있군요. 이제 query로 table 목록을 조회해보겠습니다.

1
SELECT * FROM sqlite_master WHERE type='table';

제가 열어본 테이블은 아래와 같은 구조를 가지고 있었네요. 복잡하게 테이블을 구성하려면 이렇게도 만들수가 있나봅니다. ㅎㅎ

잘 보이도록 옮겨적어보았습니다.

1
2
3
4
5
6
7
8
9
10
11
table|Accounts|Accounts|2|CREATE TABLE "Accounts" (
"id" integer primary key autoincrement not null ,
"email" varchar collate NOCASE ,
"encrypted_password" varchar ,
"username" varchar collate NOCASE ,
"status" integer ,
"online" integer ,
"funds" integer ,
"owns_property" integer ,
"nutrition" integer ,
"experience_points" integer )
1
2
3
4
5
6
7
8
9
10
11
12
table|sqlite_sequence|sqlite_sequence|3|CREATE TABLE sqlite_sequence(name,seq)
table|PlacedObjects|PlacedObjects|4|CREATE TABLE "PlacedObjects" (
"id" integer primary key autoincrement not null ,
"owner_id" integer ,
"unique_name" varchar ,
"x" float ,
"y" float ,
"z" float ,
"rot_x" float ,
"rot_y" float ,
"rot_z" float ,
"rot_w" float )
1
2
3
4
5
6
7
table|Inventory|Inventory|5|CREATE TABLE "Inventory" (
"id" integer primary key autoincrement not null ,
"owner_id" integer ,
"hash" integer ,
"amount" integer ,
"shelf_life" float )


sqlite는 다른 '서버/클라이언트' 데이터베이스들과는 다르게, db별로 파일 1개만으로 구성되어 있습니다. 따라서 파일 그 자체에 db데이터가 모두 저장됩니다. 파일을 열고 수정하고 저장하는 방식이기 때문에 엄연히 분류하자면 데이터베이스 엔진보다는 fopen() 와 같은 단순한 파일 저장함수와 같은 역할에 더 가깝다고 하네요.

그리고 '빅데이터'나 '동시쓰기작업이 많은 경우', '데이터가 저장되는 위치가 앱과 떨어져서 네트워크로 원격 연결되어 있는 경우'에는 sqlite가 적합하지 않다고 합니다. sqlite는 가볍게 만들어졌기 때문에 대용량 데이터나 다양한 형식의 데이터를 처리하기 힘들다고 하네요. 그리고 동시에 쓰는 작업도 한계가 있습니다. 그리고 제일 중요한 점은, 원격에서 데이터를 처리하는 용도로는 관계형 데이터베이스보다 대역폭을 더 많이 필요로 하기 때문에 매우 적절하지 않습니다. sqlite가 아닌 mysql과 같은 관계형 데이터베이스 엔진은 그 엔진 자체의 크기가 큰 대신에 네트워크에서 주고 받는 데이터의 대역폭은 매우 적게 사용한다고 합니다.

저와 같이 멀티플레이 게임을 개발하고자 하는 입장에서는 sqlite가 그다지 매력적으로 느껴지지는 않는 것 같습니다. 왜냐하면 동시 접속 쓰기 이용자가 스케일업으로 많아지는 경우도 고려해야하고, 원격 접속을 더 편리하게 하면서 데이터를 관리할 수 있으면 더 좋기 때문입니다. 물론 작은 규모의 멀티플레이 게임에는 도입할 수도 있을 것 같습니다. 클라우드 서버에 업로드 해놓는 game server에서만 클라우드 서버에 같이 위치한 sqlite에 접속할 수 있도록 구성한다면 동시 쓰기 문제나 네트워크 간 큰 대역폭의 통신 문제도 해결되기 때문입니다.

오늘은 이만 포스팅을 마치도록 하겠습니다.

읽어주셔서 감사합니다.

sticker


{참고자료)

https://www.sqlite.org/whentouse.html

Appropriate Uses For SQLite Embedded devices and the internet of things Because an SQLite database requires no administration, it works well in devices that must operate without expert human support. SQLite is a good fit for use in cellphones, set-top boxes, televisions, game consoles, cameras, watches, kitchen appliances, th… Embedded devices and the internet of things Because an SQLite database requires no administration, it works well in devices that must operate without expert human support. SQLite is a good fit for use in cellphones, set-top boxes, televisions, game consoles, cameras, watches, kitchen appliances, th…

https://torbjorn.tistory.com/528

Ubuntu SQLite3 설치 방법 SQLite3 설치는 쉽습니다 $ apt update $ apt install sqlite3 apt로 설치해줍니다 $ sqlite3 –version 3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1 위 명령어로 SQLite3의 버전을 확인할 수 있습니다 SQLite3 설치는 쉽습니다 $ apt update $ apt install sqlite3 apt로 설치해줍니다 $ sqlite3 –version 3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1 위 명령어로 SQLite3의 버전을 확인할 수 있습니다

https://www.tutorialspoint.com/sqlite/sqlite_explain.htm

SQLite - EXPLAIN SQLite EXPLAIN - SQLite statement can be preceded by the keyword EXPLAIN or by the phrase EXPLAIN QUERY PLAN used for describing the details of a table. SQLite EXPLAIN - SQLite statement can be preceded by the keyword EXPLAIN or by the phrase EXPLAIN QUERY PLAN used for describing the details of a table.

https://github.com/praeclarum/sqlite-net

GitHub - praeclarum/sqlite-net: Simple, powerful, cross-platform SQLite client and ORM for .NET Simple, powerful, cross-platform SQLite client and ORM for .NET - GitHub - praeclarum/sqlite-net: Simple, powerful, cross-platform SQLite client and ORM for .NET Simple, powerful, cross-platform SQLite client and ORM for .NET - GitHub - praeclarum/sqlite-net: Simple, powerful, cross-platform SQLite client and ORM for .NET

https://hitomis.tistory.com/42

[sqlite] SQLite 설치 / 간단사용법 SQLite 설치 / 간단사용법 SQLite는 MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. 영어권에서는 '에스큐엘라이트(ˌɛskjuːɛlˈlaɪt)'[3]또는 '시퀄라이트(ˈsiːkwəl.laɪt)'[4]라고 읽는다. 일반적인 RDBMS에 비해 대규모 작업에는 적합하지 않지만, 중소 규모라면 속도에 손색이 없다. 또 API는 단순히 라이브러리를 호출하는 것만 있으며, 데이터를 저장하는 데 하나의 파일만을 사용하는 것이 특징이다. … SQLite 설치 / 간단사용법 SQLite는 MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. 영어권에서는 '에스큐엘라이트(ˌɛskjuːɛlˈlaɪt)'[3]또는 '시퀄라이트(ˈsiːkwəl.laɪt)'[4]라고 읽는다. 일반적인 RDBMS에 비해 대규모 작업에는 적합하지 않지만, 중소 규모라면 속도에 손색이 없다. 또 API는 단순히 라이브러리를 호출하는 것만 있으며, 데이터를 저장하는 데 하나의 파일만을 사용하는 것이 특징이다. …

https://araikuma.tistory.com/709

[SQLite] 데이터 - 데이터 삭제 (DELETE문) DELETE 문을 사용하여 테이블에 저장되어 있는 데이터를 삭제하는 방법에 대해 설명한다.테이블의 데이터를 삭제하기테이블에서 데이터를 삭제하려면 DELETE 문을 사용한다. 형식은 다음과 같다.DELETE FROM 테이블명 WHERE 조건식; 먼저 삭제하려는 데이터를 WHERE 절 조건식으로 지정한다. 조건식에 일치하는 데이터가 여러 개인 경우에는 여러 데이터를 한꺼번에 삭제된다. WHERE 절을 생략하면 테이블의 모든 데이터가 삭제된다.그러면 실제로 해보도록 하겠다. 다음과 같이 테이블을 만든다. 그러고 테이블에 데이터를 추가한다… DELETE 문을 사용하여 테이블에 저장되어 있는 데이터를 삭제하는 방법에 대해 설명한다.테이블의 데이터를 삭제하기테이블에서 데이터를 삭제하려면 DELETE 문을 사용한다. 형식은 다음과 같다.DELETE FROM 테이블명 WHERE 조건식; 먼저 삭제하려는 데이터를 WHERE 절 조건식으로 지정한다. 조건식에 일치하는 데이터가 여러 개인 경우에는 여러 데이터를 한꺼번에 삭제된다. WHERE 절을 생략하면 테이블의 모든 데이터가 삭제된다.그러면 실제로 해보도록 하겠다. 다음과 같이 테이블을 만든다. 그러고 테이블에 데이터를 추가한다…

https://stitchcoding.tistory.com/9

SQLite은 언제 사용하면 좋을까? SQL이라는 존재 자체를 처음 접한 건 데잇걸즈 수업을 통해서였다. pandas로 csv 파일만 읽고 쓰던 작업을 하던 중에 잠시 맛보기처럼 배웠는데, 실무에서 많이 쓰인다는 건 조금 나중에 알게 되었다. SQL의 사용 빈도는 차치하고, 최근에 db를 붙여보는 것에 도전하고 싶어 이래저래 찾다 보니 sqlite를 다시 만나게 되었다. 처음 SQL을 접할 때도 sqlite를 설치해서 간단하게 쿼리문을 작성했던 기억이 난다. 42 과제나 실제 많은 서비스를 살펴보면 MySQL이나 Oracle을 사용하는데, 이들과 sqlite는 어떤 차… SQL이라는 존재 자체를 처음 접한 건 데잇걸즈 수업을 통해서였다. pandas로 csv 파일만 읽고 쓰던 작업을 하던 중에 잠시 맛보기처럼 배웠는데, 실무에서 많이 쓰인다는 건 조금 나중에 알게 되었다. SQL의 사용 빈도는 차치하고, 최근에 db를 붙여보는 것에 도전하고 싶어 이래저래 찾다 보니 sqlite를 다시 만나게 되었다. 처음 SQL을 접할 때도 sqlite를 설치해서 간단하게 쿼리문을 작성했던 기억이 난다. 42 과제나 실제 많은 서비스를 살펴보면 MySQL이나 Oracle을 사용하는데, 이들과 sqlite는 어떤 차…


글을 작성하면서 들은 좋은 음악 유투브 추천! https://youtu.be/Opbi1a35pY8

[영상]

sticker

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.