Thứ năm, 31/10/2013 | 00:00 GMT+7

Làm thế nào và khi nào sử dụng Sqlite


Sqlite là một công cụ SQL open-souce rất đơn giản và nhanh chóng. Hướng dẫn này sẽ giải thích khi nào là tối ưu để sử dụng Sqlite, trái ngược với RDBMS đầy đủ như Mysql hoặc Postgres, cũng như cách cài đặt nó và các ví dụ sử dụng cơ bản bao gồm CRUD - Tạo, Đọc, Cập nhật và Xóa.

Quan niệm sai lầm


Đừng để bị lừa khi nghĩ rằng Sqlite chỉ để thử nghiệm và phát triển. Ví dụ: nó hoạt động tốt đối với các trang web nhận được tới 100.000 lượt truy cập mỗi ngày– và đây là một giới hạn thận trọng. Kích thước tối đa cho database Sqlite là 140 Terabyte (chắc là đủ, đúng không?) Và nó có thể nhanh hơn đáng kể so với RDBMS đầy đủ. Database đầy đủ và tất cả dữ liệu cần thiết khác được lưu trữ trong một file bình thường trong hệ thống file của server lưu trữ, vì vậy không cần quá trình server riêng biệt (loại bỏ tất cả nhu cầu giao tiếp giữa các quá trình chậm).

Sử dụng tối ưu trên VPS của bạn


Sqlite tập trung vào sự đơn giản. Bởi vì nó là hoàn toàn bên trong, nó thường nhanh hơn đáng kể so với các lựa chọn thay thế. Nếu bạn đang tìm kiếm tính di động (liên quan đến cả ngôn ngữ và nền tảng), thì sự đơn giản, tốc độ và dung lượng bộ nhớ nhỏ – Sqlite là lý tưởng. Thiếu sót của nó chỉ rõ ràng nếu bạn cần đọc hoặc ghi đồng thời cao: Sqlite chỉ có thể hỗ trợ một người viết tại một thời điểm và độ trễ hệ thống file thông thường cao có thể gây bất tiện nếu có nhu cầu nhiều client truy cập database Sqlite đồng thời. Một nhược điểm cuối cùng có thể xảy ra là cú pháp của nó, mặc dù tương tự như các hệ thống SQL khác, là duy nhất. Mặc dù việc chuyển sang một hệ thống khác là khá đơn giản, nhưng nếu bạn phát triển 'vượt trội' Sqlite, sẽ có một số chi phí liên quan đến quá trình chuyển đổi.

Để biết thêm thông tin, có một số phác thảo rất tốt về ưu và nhược điểm của Sqlite bên trong tài liệu chính thức .

Cài đặt Sqlite trên VPS của bạn


Mô-đun sqlite3 là một phần của thư viện Python tiêu chuẩn, do đó, trên bản cài đặt Ubuntu tiêu chuẩn hoặc bất kỳ hệ thống nào có cài đặt Python, không cần cài đặt thêm. Để cài đặt giao diện dòng lệnh Sqlite trên Ubuntu, hãy sử dụng các lệnh sau:

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

Nếu bạn cần biên dịch nó từ nguồn, thì hãy lấy version autoconf mới nhất từ trang web SQLite chính thức . Tại thời điểm viết bài:

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

(Lưu ý khi xây dựng từ nguồn: 1) Không thực hiện việc này trên bản cài đặt Ubuntu tiêu chuẩn, vì bạn có thể gặp lỗi “tiêu đề và version nguồn không khớp”, do xung đột giữa version đã được cài đặt và version mới được cài đặt. 2) Nếu lệnh make có vẻ mong đợi thêm đầu vào, hãy kiên nhẫn vì nguồn có thể mất một lúc để biên dịch).

Cách sử dụng giao diện dòng lệnh cơ bản


Để tạo database , hãy chạy lệnh:

sqlite3 database.db

Trong đó 'cơ sở dữ liệu' là tên database của bạn. Nếu file database.db đã tồn tại, Sqlite sẽ mở một kết nối với nó; nếu nó không tồn tại, nó sẽ được tạo ra. Bạn sẽ thấy kết quả tương tự như:

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

Bây giờ ta hãy tạo một bảng và chèn một số dữ liệu. Bảng có tên “rượu vang” này có bốn cột: cho ID, nhà production rượu, loại rượu và quốc gia xuất xứ của rượu. Vì chưa phải là thứ Sáu, ta sẽ chỉ chèn ba loại rượu vào database của bạn :

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");

Ta đã tạo database , bảng và một số mục nhập. Bây giờ nhấn Ctrl + D để thoát khỏi Sqlite và nhập như sau ( thay thế tên database của bạn cho 'cơ sở dữ liệu'), thao tác này sẽ kết nối lại với database mà ta vừa tạo:

sqlite3 database.db

Bây giờ gõ:

SELECT * FROM wines;

Và bạn sẽ thấy các mục ta vừa thực hiện:

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

Tuyệt quá. Đó là nó để tạo và đọc. Hãy cập nhật và xóa:

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

Điều này sẽ cập nhật database để tất cả các loại rượu vang được liệt kê là đến từ Pháp thay vào đó sẽ được liệt kê là đến từ Nam Phi. Kiểm tra kết quả với:

SELECT * FROM wines;

Và bạn sẽ thấy:

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

Bây giờ tất cả các loại rượu vang của ta đều đến từ Nam Phi. Hãy uống KWV trong lễ kỷ niệm và xóa nó khỏi database của ta :

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

Và ta sẽ thấy một ít rượu vang được liệt kê trong hầm rượu của ta :

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

Và điều đó bao gồm tất cả các hoạt động database cơ bản. Trước khi kết thúc, ta hãy thử một ví dụ khác ít tầm thường hơn (một chút), sử dụng hai bảng và một phép nối cơ bản.

Thoát khỏi Sqlite bằng lệnh Ctrl + D và kết nối lại với database mới với sqlite3 database2.db .

Ta sẽ tạo một bảng wines rất giống nhau, nhưng cũng là một bảng countries , nơi lưu trữ tên của đất nước và tổng thống hiện tại của nó. Trước tiên, hãy tạo bảng quốc gia và chèn Nam Phi và Pháp vào đó bằng ( lưu ý bạn có thể copy paste nhiều dòng mã sqlite cùng một lúc):

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");

Và sau đó, ta có thể tạo lại bàn rượu của bạn với:

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);

Bây giờ ta hãy xem Nam Phi có những loại rượu nào:

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

Và bạn sẽ thấy:

Pinotage
Shiraz

Và điều đó bao gồm một Tham gia cơ bản. Lưu ý Sqlite làm được rất nhiều điều cho bạn. Trong câu lệnh join ở trên, nó mặc định là INNER JOIN , mặc dù ta chỉ sử dụng từ khóa JOIN . Ngoài ra, ta không phải chỉ định wines.country_id vì nó không rõ ràng. Mặt khác, nếu ta thử lệnh:

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

Ta sẽ nhận được thông báo lỗi Error: ambiguous column name: id . Điều này đủ công bằng vì cả hai bảng của ta đều có cột id . Nhưng nhìn chung Sqlite khá dễ tha thứ. Các thông báo lỗi của nó có xu hướng làm cho việc xác định và khắc phục sự cố nào trở nên khá đơn giản và điều này giúp đẩy nhanh quá trình phát triển.

Để được trợ giúp thêm về cú pháp, tài liệu chính thức có đầy đủ các sơ đồ như sơ đồ này , có thể hữu ích, nhưng nếu bạn thích các ví dụ cụ thể, đây là liên kết đến hướng dẫn với cái nhìn tổng quan về hầu hết các kiểu nối .

Cuối cùng, Sqlite có shell bọc và trình điều khiển bằng tất cả các ngôn ngữ chính và có thể chạy trên hầu hết các hệ thống. Danh sách nhiều người trong số họ có thể được tìm thấy ở đây .


Tags:

Các tin liên quan