Hệ quản trị cơ sở dữ liệu Sqlite với một số ưu điểm đã được các nhà phát triển hệđiều hành chọn làm hệ quản trị cơ sở dữ liệu để lưu dữ liệu trong ứng dụng.. Hệ quản trị cơ sở dữ liệu
Trang 1Cán bộ hướng dẫn: Thầy Phạm Văn Hưởng
Sinh viên thực hiện:
- Nguyễn Quyết Thắng
- Phạm Thị Nguyệt
- Nguyễn Hữu Tú Lớp: AT10D
HÀ NỘI 2016
Trang 2HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI THỰC TẬP CƠ SỞ
AN TOÀN VÀ BẢO MẬT
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
SQLITE
Nhận xét của cán bộ hướng dẫn:
Điểm chuyên cần:
Điểm xác nhận:
Xác nhận của cán bộ hướng dẫn
Trang 3Mục lục
Trang 4DANH MỤC HÌNH ẢNH
DANH MỤC BẢNG BIỂU
Trang 5LỜI NÓI ĐẦU
Ngày nay, khoa học công nghệ ngày càng phát triển làm cho nhu cầu sử dụng cácứng dụng phần mềm tăng lên kéo theo nhu cầu lưu trữ dữ liệu ngày càng lớn Vấn đề lựachọn hệ quản trị CSDL để tối ưu hoá việc lưu trữ dữ liệu đã và đang là vấn đề được các nhàphát triển cân nhắc và nghiên cứu Việc lựa chọn một hệ quản trị cơ sở dữ liệu để đáp ứngcác yêu cầu về lưu trữ dữ liệu cần thoả mãn một số yêu cầu như: là cơ sở dữ liệu nhúng,dung lượng nhỏ, thiết kế và cài đặt đơn giản, dễ thao tác là vấn đề mà các nhà phát triểnhướng tới
Hệ quản trị cơ sở dữ liệu Sqlite với một số ưu điểm đã được các nhà phát triển hệđiều hành chọn làm hệ quản trị cơ sở dữ liệu để lưu dữ liệu trong ứng dụng Hệ quản trị cơ
sở dữ liệu Sqlite cũng tương tự như MySql, PostgreSql, nó được biết đến là một hệ quản trị
cơ sở dữ liệu quan hệ nhỏ gọn, hoàn chỉnh có thể cài đặt bên trong các ứng dụng hay còngọi là hệ quản trị cơ sở dữ liệu nhúng Hệ quản trị này được Richard Hipp viết dưới dạngthư viện bằng ngôn ngữ lập trình C Với một số ưu điểm như tệp tin cơ sở dữ liệu duy nhất,dung lượng chưa đến 350Kb được nhúng trong ứng dụng mà không cần cấu hình và cài đặt.Sqlite còn thực hiện các thao tác đơn giản nhanh hơn các hệ thống cơ sở dữ liệu khách / chủkhác Ngoài ra, tốc độ thực thi của Sqlite nhanh và hiệu suất thường là khá tốt ngay cả hoạtđộng trong môi trường bộ nhớ thấp Với một số đặc điểm được nêu ra, hệ quản trị cơ sở dữliệu Sqlite đã khẳng định được ưu thế và được các nhà phát triển chọn để giải quyết các vấn
đề dung lượng bộ nhớ và lưu trữ dữ liệu
Mục tiêu mà đề tài muốn trình bày là tổng quan về hệ quản trị cơ sở dữ liệu để từ đó cónền tảng để tìm hiểu kỹ hơn về cơ sở dữ liệu Sqlite và vận dụng để thiết lập an toàn và bảomật trong hệ quản trị này
Chúng em xin được gửi lời cảm ơn tới thầy Phạm Văn Hưởng đã hướng dẫn tận tìnhgiúp chúng em thực hiện đề tài này
Trong quá trình thực hiện còn nhiều sai sót rất mong nhận được sự đóng góp ý kiến từthầy cô và các bạn
Trang 6Chương 1 Tổng quan về hệ quản trị cơ sở dữ liệu SQLite
1.1 Giới thiệu chung về hệ quản trị cơ sở dữ liệu SQLite
Hệ quản trị CSDL Sqlite ra đời giải quyết được vấn đề lưu trữ dữ liệu trong cácứng dụng cần hệ quản trị CSDL nhúng Sqlite là mã nguồn mở, được phát hành vào năm
2000 Với một số đặc điểm như linh động, dễ sử dụng, nhỏ gọn, hiệu quả và tính tin cậycao thì Sqlite được đánh giá là một hệ quản trị CSDL tốt Vậy hệ quản trị CSDL Sqlite làgì? Nó đã được phát triển như thế nào? Hệ quản trị CSDL Sqlite có những ưu nhượcđiểm gì và các nhà phát triển, nhà quản trị đã đánh giá về nó ra sao? Hay các đặc điểmcủa Sqlite sẽ được làm rõ trong chương này
Hình 1 Logo của hệ quản trị CSDL Sqlite 1.1.2 Khả năng nhúng
Sqlite là một kiểu CSDL nhúng, nó được nhúng vào ứng dụng và đảm nhiệmluôn vai trò làm máy chủ quản lý dữ liệu Mã của Sqlite được nhúng cùng mã củachương trình, và mã đó sẽ được biên dịch cùng với các đoạn mã khác của chương trình.Sqlite thực thi mà không phụ thuộc vào các yếu tố như cấu hình CSDL, kết nối mạng,yêu cầu tên người dùng hay mật khẩu nên Sqlite rất dễ dàng được sử dụng như mộtchương trình hỗ trợ lưu dữ liệu trong ứng dụng Khi chương trình được cài lên thiết bị,nếu thiết bị không có kết nối mạng thì việc kết nối dữ liệu cũng không bị ảnh hưởng,
Trang 7chương trình vẫn có thể hoạt động tốt Ngoài ra, tập tin CSDL Sqlite chỉ là một tập tinduy nhất, nhỏ gọn được nhúng bên trong ứng dụng Tất cả dữ liệu của ứng dụng đượclưu trữ trong tập tin này và các thao tác với dữ liệu như chèn, sửa, xoá, tìm kiếm có thểđược thực hiện thông qua các chức năng của ứng dụng Cả ứng dụng và máy chủ đềuchạy với nhau trong cùng một quá trình nên làm giảm chi phí liên quan như kết nốimạng, đơn giản hoá việc quản lý CSDL và dễ dàng hơn cho việc triển khai ứng dụng.
Thông thường, những ứng dụng chạy trên thiết bị di động, CSDL sẽ được nhúngtrong ứng dụng Đầu ra của các chương trình đó là một ứng dụng bao gồm chức năng vàCSDL được nhúng trong nó Những ứng dụng này thường được bán trên các chợ côngnghệ như App Store, Google Play, Window Store, và nhà phát triển thường có xu hướng
là bán ứng dụng mà không muốn mất nhiều chi phí bảo trì và quản lý dữ liệu Do đó cácnhà phát triển thường chọn theo hướng đóng gói chương trình bao đã chứa CSDL
1.1.3 Sqlite là CSDL của nhà phát triển
Đối với nhà phát triển ứng dụng, Sqlite là hệ quản trị CSDL linh hoạt Sqliteđược biết đến như là một CSDL, là thư viện lập trình và là công cụ dòng lệnh rất dễ sửdụng Do đó, Sqlite có thể được coi là một công cụ học rất tốt cung cấp sự mở đầu tốtnhững hiểu biết về CSDL Có nhiều cách sử dụng Sqlite như: môi trường nhúng,website, dịch vụ hoạt động hệ thống, các tập lệnh, và ứng dụng Ngoài ra, với một số lý
do như: không có hệ quản trị CSDL bên ngoài hoặc không cấu hình mạng hoặc không
Hình 2 Quá trình nhúng Sqlite trong máy chủ
Trang 8cần tên người dùng và mật khẩu nên Sqlite là CSDL tốt cho việc phát triển và kiểm thử.
Bên cạnh chức năng nổi trội nhất là lưu trữ dữ liệu, Sqlite còn cung cấp các công
cụ chức năng để phục vụ cho việc xử lý dữ liệu chung Tuỳ thuộc vào kích thước và độphức tạp, Sqlite có thể dễ dàng biểu diễn một số cấu trúc dữ liệu ứng dụng như một bảnghoặc nhiều bảng trong CSDL Người dùng vẫn có thể thực hiện các truy vấn với dữ liệunhư các CSDL khác
Với các lập trình viên lập trình ứng dụng cho điện thoại di động cài hệ điều hànhiPhone hoặc Android, việc sử dụng Sqlite cũng đơn giản trong việc tạo ra CSDL, nhúngCSDL vào ứng dụng và việc xử lý dữ liệu chung Để tạo ra CSDL, nhà phát triển ứngdụng có thể dùng công cụ Sqlite Manager hoặc công cụ dòng lệnh Những công cụ trênrất dễ dàng cài đặt, không quá phức tạp ví dụ như Sqlite Manager được tích hợp sẵntrong Firefox, còn công cụ dòng lệnh cũng đã được hỗ trợ trong hệ điều hành OS X
1.1.4 Sqlite đối với nhà quản trị
Sqlite không chỉ là CSDL của nhà phát triển mà Sqlite còn là công cụ hữu ích chocác nhà quản trị hệ thống Sqlite nhỏ gọn, nó có dịch vụ dòng lệnh có thể sử dụng từshell hoặc dòng lệnh Trong hệ điều hành OS X, người quản trị có thể dễ dàng thao tácvới CSDL Sqlite bằng công cụ Terminal đã được tích hợp sẵn trong hệ điều hành
Sqlite cũng là một công cụ tốt cho quản trị viên tìm hiểu thêm về CSDL Sqlitecài đặt nhanh và dễ dàng trên bất kỳ nền tảng nào, và các tập tin CSDL chia sẻ miễn phívới nhau mà không cần chuyển đổi định dạng Sqlite có đầy đủ các chức năng nhưngkhông quá phức tạp trong việc tìm hiểu
Nói tóm lại, với những đặc điểm như nhỏ gọn, dễ dàng thao tác trên nhiều môitrường công cụ hay việc chia sẻ dữ liệu thì Sqlite là công cụ tốt cho cả nhà phát triển vànhà quản trị dữ liệu
1.2 Các đặc trưng của hệ quản trị CSDL Sqlite
Sqlite tuy là một CSDL nhỏ, nhưng nó cung cấp đầy đủ các tính năng và khảnăng mà một hệ quản trị CSDL có Sqlite hỗ trợ tập hợp các chức năng cơ bản nhưgiao tác, khung nhìn, kiểm tra ràng buộc, truy vấn con liên quan và các truy vấn kếthợp cùng với nhiều tính năng khác trong CSDL như bộ kích hoạt, chỉ mục, tăng tựđộng chỉ số của cột, các câu lệnh LIMIT/OFFSET Nó cũng có nhiều chức năng đặcbiệt như CSDL bộ nhớ trong, gán kiểu động, và giải quyết một số xung đột Dưới dây
là một số các tính năng đặc trưng được mở rộng trong hệ quản trị CSDL Sqlite [7]
Trang 91.2.1 Không cần cấu hình
Như đã đề cập ở các phần trên, Sqlite được thiết kế mà có thể không cần quản trịviên của hệ thống Việc cấu hình và quản lý Sqlite rất đơn giản, nó đã bao gồm đầy đủcác chức năng được cấu hình trong hệ thống, người dùng không cần can thiệp vào bêntrong nó mà vẫn có thể dùng như một hệ thống hoàn chỉnh
1.2.2 Tính di động,khả chuyển
Sqlite được thiết kế đặc biệt với khả năng di động của nó Sqlite có thể biên dịch
và chạy trên nhiều hệ điều hành như Windows, Linux, BSD, OS X, hệ điều hành Unixnhư Solaris, HPUX và AIX, cũng như nhiều nền tảng nhúng như QNX, VxWorks,Symbian, Palm OS và Window CE Nó còn có thể hoạt động tốt trên các kiến trúc bản
16, 32 và 64 bit với các thứ tự byte lớn nhỏ Tính di động không chỉ dừng lại với phầnmềm mà các tập tin CSDL Sqlite cũng có khả năng di động Các định dạng tập tinCSDL là định dạng nhị phân, chúng tương thích trên tất cả các hệ điều hành, kiến trúcphần cứng và thứ tự byte mà Sqlite có thể hoạt động được Người dùng có thể tạoCSDL Sqlite trên rất nhiều công cụ và sử dụng các hệ điều hành hay thiết bị, ngay cảtrên điện thoại di động mà không cần bất kỳ sự chuyển đổi hay sửa đổi nào Hơn nữa,CSDL Sqlite có thể chứa tới 2 terabyte dữ liệu và hỗ trợ 2 kiểu mã hoá UTF-8 và UTF-16
Hình 3 Sqlite trên window
Trang 10Hình 4 Sqilte trên Ubuntu
Dung lượng và thời gian chạy của Sqlite trên một số hệ điều hành tiêu biểu đượcliệt kê trong bảng 2.1[19]
OS Cài đặt tối ưu Kích thước (bytes) Thời gian chạy
Trang 11GCC 4.5.2
Sqlite 3.7.8
X86_64 (64bit)
-O1 455072 0.62-Os 404201 0.59-O2 499543 0.53-O3 678465 0.54Max OS 10.7.1
Bảng 1 Kích thước và thời gian chạy của Sqlite trên một số hệ điều hành
1.2.3 Tính nhỏ gọn
Sqlite được thiết kế nhẹ và khép kín; một tập tin tiêu đề, một thư viện và khôngyêu cầu CSDL bên ngoài Tất cả mọi đối tượng được đóng gói, dung lượng nhỏ hơn mộtnửa megabyte Ngoài ra, tập tin CSDL Sqlite cũng nhỏ gọn, chúng là những tập tin hệthống thông thường Với bất kỳ hệ thống nào thì tất cả các đối tượng trong CSDL nhưbảng, bộ kích hoạt, lược đồ, chỉ mục và khung nhìn đều được chứa trong một tập tinCSDL duy nhất Hơn nữa, Sqlite dử dụng các bản ghi có chiều dài có thể thay đổi, việccấp phát bộ nhớ chỉ cần một dung lượng tối hiểu để Sqlite lưu giữ các trường
1.2.4 Tính đơn giản
Như một thư viện lập trình, API của Sqlite là một trong những giao diện lập trình
Hình 5 Dung lượng tập tin CSDL Sqlite
Trang 12ứng dụng đơn giản và dễ sử dụng API được thiết kế giúp người dùng có thể tuỳ chọnSqlite bằng nhiều cách, chẳng hạn như thực hiện các chức năng do người dùng mở rộngbằng ngôn ngữ C Hơn thế nữa, có nhiều thư viện giao diện và nhiều ngôn ngữ có thể sửdụng được CSDL Sqlite Perl, Python, Ruby, Tcl/Tk, Java, PHP, Visual Basic, ObjectiveC Việc thiết kế các thư viện giao diện cho phép Sqlite có đầy đủ các chức năng và mởrộng khi mà mã nguồn của chúng không phức tạp và vẫn đơn giản Mỗi khối của hệthống chuyên xử lý một nhiệm vụ cụ thể Những khối này giúp cho Sqlite có thể dễ dàngphát triển và gỡ lỗi mà không phụ thuộc vào hệ thống Kết quả của những công việc đógiúp Sqlite có thể tách biệt rõ ràng giữa front-end (trình biên dịch SQL) và back-end (hệthống lưu trữ) cho phép 2 thành phần này độc lập nhau Tóm lại, việc thiết kế API rõràng trong cả tài liệu giao diện, việc phân chia các khối và thành phần riêng biệt, không
có nhiệm vụ thực thi và xử lý các câu lệnh truy vấn Còn hệ thống back-end đảm nhiệmchức năng lưu trữ dữ liệu cho Sqlite Theo đó, không cần cấu hình máy chủ, không cầnkết nối mạng hoặc không phải lo lắng về việc kết nối CSDL, và không có giới hạn nềntảng, không phải tìm hiểu kiến trúc API và miễn phí về bản quyền Thay vào đó, nếu
Hình 6 Tập tin thư viện Sqlite trong công cụ lập trình Xcode
Trang 13bạn muốn sử dụng CSDL Sqlite, bạn chỉ cần đưa Sqlite vào ứng dụng.
Hình 7 Danh sách API của Sqlite 1.2.6 Cấp phép tự do
Trang 14Tất cả mã nguồn của Sqlite được chia sẻ mà không cần giấy phép Ai cũng có thể
sử dụng bất kỳ phần nào của Sqlite mà không phải bồi thường bản quyền tác giả Sqlitekhông giới hạn pháp lý về cách bạn có thể sử dụng mã nguồn dưới mọi hình thức nhưchỉnh sửa, kết hợp, phân phối, bán và sử dụng cho bất kỳ mục đích thương mại màkhông có phí bản quyền hay bị hạn chế Tóm lại Sqlite là hệ quản trị CSDL miễn phí
1.2.7 Tính tin cậy
Mã nguồn của Sqlite không chỉ miễn phí mà Sqlite còn cho phép viết trong đó
Mã nguồn của Sqlite bao gồm gần 70.000 dòng chuẩn được việc bằng ngôn ngữ C, mã nguồn rõ ràng, được chú thích rất tốt Mã nguồn còn được thiết kế giúp người sử dụng tiếp cận, dễ dàng hiểu và dễ dàng chỉnh sửa và dễ dàng truy cập Với lập trình viên thạongôn ngữ C thì có thể theo dõi mọi phần của mã nguồn Sqlite hoặc với mã nguồn đó thì
họ có thể đủ thời gian để tìm hiểu
Thêm nữa, mã nguồn của Sqlite cung cấp API đầy đủ tính năng đặc biệt choviệc tuỳ chọn và mở rộng Sqlite thông qua việc bổ sung các hàm do người dùng địnhnghĩa, tập hợp và đối chiếu tuần tự cùng với hỗ trợ cho các hoạt động bảo mật
1.2.8 Tính tiện lợi
Hình 8 Sqlite không yêu cầu bản quyền
Hình 9 Một đoạn mã nguồn thƣ viện của Sqlite
Trang 15Ngoài những tính năng giống như các hệ quản trị CSDL khác, thì Sqlite còn cómột số các chức năng duy nhất mà chỉ Sqlite mới có Nó bao gồm các tính năng như:gán kiểu động, giải quyết xung đột và khả năng đính kèm nhiều CSDL cho một phiênlàm việc đơn lẻ.
Tính năng gán kiểu động của Sqlite gần giống với ngôn ngữ kịch bản Đặc biệt,kiểu của biến được xác định bằng chính giá trị của nó, mà không phải cần định nghĩatrước như các ngôn ngữ khác như C và Java Hầu hết các hệ thống CSDL giới hạn giátrị các trường khi định nghĩa một kiểu trong cột tương ứng Nhưng trong Sqlite thì cáccột có thể có những kiểu được định nghĩa, và các trường không bị giới hạn giá trị, vàbiến trong ngôn ngữ kịch bản có thể được gán giá trị với các kiểu khác nhau
Thêm nữa, chức năng giải quyết xung đột trong Sqlite cũng là một tính năngtiện lợi khác Chẳng hạn khi thực thi câu lệnh UPDATE bạn có thể gặp lỗi xung độtkiểu của biến Sqlite có câu lệnh UPSET hoặc MERGE để giải quyết vấn đề xung độtđó
Cuối cùng là tính năng đính kèm tập tin CSDL bên ngoài vào phiên bản làmviệc hiện tại Tính năng này được dùng khi bạn đang kết nối và làm việc với mộtCSDL, bạn muốn làm việc với một CSDL khác cùng một thời điểm, bạn có thể dùngcâu lệnh ATTACH để thực hiện mục đích này
Tóm lại, với việc cung cấp một số tính năng đặc biệt thì Sqlite giúp người dùng
sử dụng và thao tác với hệ quản trị Sqlite dễ dàng và tiện lợi hơn
1.3 Hiệu suất hoạt động và hạn chế
1.3.1 Hiệu suất hoạt động
Sqlite là CSDL có tốc độ cao Tuy nhiên, theo đánh giá chung thì có một số chứcnăng Sqlite có thể làm nhanh hơn các hệ quản trị CSDL khác, và một số chức năngkhác thì không thể làm hoặc không thể làm tốt như CSDL khác Sqlite sử dụng cấu trúccây-B dùng để đánh chỉ mục và cây-B, cây+B dùng trong bảng dữ liệu, đây cũng làcách mà hầu hết các hệ thống CSDL khác đều dùng Đối với các câu lệnh đơn giản nhưSELECT, INSERT, UPDATE, so với các CSDL khác thì Sqlite thực hiện nhanh hơn
Có 2 lý do chính, lý do thứ nhất là các câu lệnh đó thường được thực thi hiện trên bộnhớ RAM hoặc ổ đĩa Lý do thứ hai là Sqlite tốn kém ít dung lượng cho việc bắt đầumột giao dịch hoặc tạo ra một kế hoạch truy vấn và Sqlite không phải chịu chi phí đểthực hiện việc kết nối đến máy chủ hay không phải đàm phán xác thực các quyền Do
Trang 16đó, Sqlite thực hiện các truy vấn đơn giản nhanh hơn.
Thực hiện kiểm tra các câu lệnh INSERT, SELECT, UPDATE, DELETE,DROP TABLE trên hệ quản trị CSDL Sqlite, MySql và PostgreSQL để đưa ra tốc độtruy vấn của Sqlite so với 2 hệ quản trị còn lại Với Sqlite, việc kiểm tra này sẽ đượcthực hiện trên phiên bản SqliteManager 0.8.1 tích hợp CSDL Sqlite 3.8.3.1 VớiPostgreSQL, việc kiểm tra được thực hiện trên phiên bản mới nhất là 9.3.4 Các phầnmềm này được cài đặt trên Window 8 64bit với cấu hình: CPU 2.5 GHz, 2.0 GB
Kiểm tra 1: Thực thi 1000 câu lệnh INSERT
CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));
insert into t1 VALUES(1,101, 'so 101');
insert into t1 VALUES(2,102, 'so 102');
…996 lệnh
insert into t1 VALUES(999,1999, 'so 999');
insert into t1 VALUES(1000,2000, 'so 1000');
Kiểm tra 2: Thực thi 1000 câu lệnh INSERT có INDEX
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));
CREATE INDEX i2 ON t2(c);
insert into t2 VALUES(1,301, 'so 301');
insert into t2 VALUES(2,302, 'so 302');
…996 lệnh
insert into t2 VALUES(99,399, 'so 399');
insert into t2 VALUES(1000,400, 'so 400');
Kiểm tra 3: Thực thi 1000 câu lệnh UPDATE không có INDEX
update t1 set b = 1101 where a = 1;
update t1
…996 lệnh
update t1
setset
bb
=
=
11021199
wherewhere
aa
=
=
2;
999;update t1 set b = 1200 where a = 1000;
Kiểm tra 4: Thực thi 1000 câu lệnh UPDATE có INDEX
Trang 17update t2 set b = 2101 where a = 1;
update t2 set b = 2102 where a = 2;
…996 lệnh
update t2 set b = 2199 where a = 999;
update t2 set b = 2200 where a = 1000;
Kiểm tra 5: Thực thi câu lệnh INNER JOINT
SELECT t1.a from inner join t2 on t1.b = t2.b;
Kiểm tra 6: Thực thi câu lệnh SELECT không có INDEX
Select b from t1 where c like '%2%';
Kiểm tra 7: Thực thi câu lệnh SELECT có INDEX
Select b from t2 where c like '%2%';
Kiểm tra 8: Thực thi câu lệnh DELETE có INDEX
delete from t1 where c like '%2%';
Kiểm tra 9: Thực thi câu lệnh DELETE không có INDEX
delete from t2;
Kiểm tra 10: Thực thi 1000 câu lệnh INSERT
BEGIN;
CREATE TABLE t3(a INTEGER, b INTEGER, c VARCHAR(100));
insert into t3 VALUES(1,301, 'so 301');
insert into t3 VALUES(2,302, 'so 302');
…996 lệnh
insert into t3 VALUES(999,3999, 'so 3999'); COMMIT;
Sau khi thực hiện các kiểm tra, kết quả thởi gian thực thi trên từng hệ quản trị CSDL được liệt kê theo bảng 2.1:
Hệ quản trị CSDL Kiểm tra Thời gian chạy
Trang 18Bảng 2 Kết quả so sánh thời gian chạy của các hệ quản trị CSDL
Một loạt các kiểm tra trên đã được thực hiện để đo hiệu suất tương đối củaSqliteManager 0.8.1 tích hợp CSDL Sqlite 3.8.3.1, PostgreSQL 9.3.4 Một số kết luậnsau khi thực hiện kiểm tra:
- Tốc độ thực thi chênh lệch nhau không lớn nhưng Sqlite 3.8.3.1 thường chạy nhanh hơn PostgreSQL 9.3.4
- Sqlite hoạt động tốt nếu nhóm nhiều hoạt động trong một giao dịch
Đối với những truy vấn lớn và phức tạp hơn thì đỏi hỏi hệ quản trị phải cần thờigian kết nối đến máy chủ hoặc cần các chi phí giao dịch và các chiến thuật để CSDLhoạt động tối ưu Trong trường hợp này, Sqlite chắc chắn có thể làm được các truy vấnnhưng Sqlite không có khả năng làm các truy vấn đó tối ưu và tốc độ truy vấn sẽ khôngnhanh Vì vậy, nếu bạn đang chọn một hệ quản trị CSDL cho một hệ thống lớn và phứctạp thì bạn nên chọn Oracle hoặc PostgreSQL hơn là chọn Sqlite Sqlite chỉ phù hợp vớicác ứng dụng vừa và nhỏ, do đó nó đặc biệt phù hợp với các ứng dụng chạy trên thiết bị
di động
1.3.2 Hạn chế của Sqlite
Cũng giống như các hệ quản trị CSDL khác, Sqlite cũng có những ưu điểm vànhược điểm Tuy nhiên, với đặc điểm là Sqlite là một CSDL nhúng, được thiết kết chocác ứng dụng vừa và nhỏ nên những hạn chế của Sqlite lại phù hợp với mục đích sửdụng của nó Nhìn chung, Sqlite có 2 hạn chế chính:
1 Hỗ trợ ghi đồng thời: Tại cùng một thời điểm, Sqlite cho phép nhiều
Trang 19người có thể đọc dữ liệu nhưng chỉ cho phép một người duy nhất có thểghi vào CSDL Sqlite Khi có một người đang thực hiện ghi vào CSDLSqlite thì không ai có thể truy cập và CSDL trong thời điểm đó VìSqlite không có cơ chế để giảm thiểu khoảng thời gian hạn chế chiếmdụng quyền truy cập
2 Kết nối: Mặc dù CSDL Sqlite có thể được chia sẻ qua hệ thống tập tin
mạng, nhưng độ trễ liên quan đến các hệ thống tập tin có thể là nguyênnhân dẫn đến hiệu suất bị ảnh hưởng Tệ hơn nữa, việc xảy ra lỗi mạngtrong quá trình chia sẻ có thể làm các tập tin Sqlite bị chỉnh sửa và thayđổi hoặc có thể bị lỗi Sqlite đã có các phiên bản NFS để điều khiển việckhoá tập tin – không cho phép chỉnh sửa tập tin trong quá trình chia sẻtrên mạng Tuy nhiên, các phiên bản NFS này đã hoạt động không hoàntoàn tốt trong mọi trường hợp
Hầu hết các hạn chế được nêu trên là “cố ý”, là kết quả của việc thiết kế Sqlite
Ví dụ như hạn chế hỗ trợ ghi đồng thời, nếu Sqlite có khả năng ghi đồng thời thì làmcho CSDL này trở nên phức tạp và điều này đi ngược với sự đơn giản trong thiết kế củaSqlite Tương tự, hạn chế không hỗ trợ kết nối mạng cũng là mục đích của các nhà pháttriển Sqlite Sqlite là CSDL nhúng, không hỗ trợ kết nối mạng Với mục đích ban đầuSqlite được thiết kế để hoạt động như một khối đơn giản, nhỏ gọn và dễ sử dụng, đượcnhúng vào bên trong ứng dụng Do đó, các hạn chế của Sqlite không cản trở nhiều trongviệc các mục đích sử dụng của nó
Trong khi Sqlite làm khá tốt một số thực thi câu lệnh SQL thì có một số cácthực thi mà Sqlite không thể thực thi được
1 Hỗ trợ hoàn tất Trigger: Sqlite hỗ trợ hầu hết các tính năng chuẩn cho
trigger Tuy nhiên, đối với tất cả các kiểu trigger, thì Sqlite yêu cầu hành
vi cho mỗi dòng, còn đối với kiểu trigger cho tất cả các câu lệnh thìSqlite không hỗ trợ được
Trang 202 Hỗ trợ hoàn tất câu lệnh ALTER TABLE: Sqlite chỉ hỗ trợ các câu lệnh
RENAME TABLE và ADD COLUMN là một dạng khác của câu lệnhALTER TABLE Những dạng khác của câu lệnh ALTER TABLEnhư
DROP COLUMN, ALTER COLUMN và ADD CONSTRAINT không thực
thi được
3.Câu lệnh RIGHT và FULL OUTER JOIN: Sqlite thực thi được câu lệnh
LEFT OUTER JOIN, nhưng không thể thực thi được câu lệnh RIGHTOUTER JOIN hoặc FULL OUTER JOIN Câu lệnh RIGHT OUTERJOIN có thể thực hiện được nếu đảo ngược thứ tự của bảng và chỉnh sửacác ràng buộc JOIN Câu lệnh FULL OUTER JOIN có thể được thựchiện nếu kết hợp 2 câu lệnh LEFT OUTER JOIN, UNION và lọc giá trịNULL bằng mệnh đề WHERE
4.Không thể cập nhật View: View trong Sqlite chỉ có thể đọc Bạn không thể
thực thi câu lệnh DELETE, INSERT hay UPDATE trên View NhưngSqlite cho phép tạo một trigger để thực hiện DELETE, INSERT hayUPDATE một View và làm những gì cần thiết trên thân hàm của trigger
Trang 215 Cửa sổ hàm: Một chức năng mới được mô tả trong ANSI SQL 99 là cửa
sổ hàm Nó cung cấp việc phân tích hàm để lấy kết quả, bảng xếp hạng,tính trung bình, độ trễ và phép toán chính Sqlite chỉ hỗ trợ trong ANSISQL 92, nên cửa sổ hàm không được hỗ trợ
6 GRANT and REVOKE: Sqlite đọc và ghi trên tập tin đĩa thông thường,
quyền truy cập duy nhất có thể được áp dụng là truy cập tập tin thôngthường của hệ điều hành cấp dưới Lệnh GRANT và REVOKE thườngđược tìm thấy ở hệ quản trị CSDL quan hệ mô hình Client – Server, trongkhi Sqlite là CSDL nhúng nên nếu có thực thi lệnh GRANT và REVOKEthì lệnh này không có ý nghĩa
1.4 So sánh hệ quản trị SQLite với các hệ quản trị khác
So với các hệ quản trị CSDL lớn như MySql hay PosgreSql thì Sqlite có những
ưu và nhược điểm Việc đưa ra một số đặc điểm như cài đặt, mô hình hệ thống sử dụng,kiểu dữ liệu được hỗ trợ, cách sử dụng và ưu điểm, nhược điểm của ba hệ quản trịCSDL Sqlite, MySQL, PostgreSQL để thấy được sự khác nhau giữa chúng
1.4.1 Cài đặt
Hệ quản trị CSDL Sqlite là tập tin duy nhất Sqlite không yêu cầu cấu hình nênkhi sử dụng chúng người sử dụng không cần cài đặt Trong khi, để sử dụng hệ quản trịCSDL MySQL và PostgreSQL thì cần cài đặt và cấu hình phức tạp Hai hệ quản trịCSDL này yêu cầu cấu hình, quản trị hệ thống Đặc biệt, để sử dụng được những chứcnăng phức tạp hơn hay những kiểu dữ liệu phức tạp hơn thì PostgreSQL còn yêu cầu càiđặt thêm những phần mềm phụ trợ như PostGIS Có thể nói, việc không cần cài đặt thìSqlite có thể dễ dàng sử dụng hơn so với hệ quản trị CSDL MySQL và PostgreSQL
Trang 221.4.2 Kiểu dữ liệu
Hầu hết các CSDL như MySQL và PostgreSQL đề sử dụng kiểu dữ liệu tĩnh thìSqlite sử dụng kiểu dữ liệu động Kiểu dữ liệu này được kết hợp với giá trị trong cột dữliệu Một số kiểu dữ liệu tương tự sẽ được nhóm vào nhóm gọi là kiểu dữ liệu tươngtự
Tên kiểu dữ liệu Tên kiểu dữ liệu
tương tự
INT INTEGERTINYINTSMALLINTMEDIUMINTUNSIGNED BIG INT
INT2INT8
INTEGER
CHARACTER(20)VARCHAR(255)VARYING CHARACTER(255)
NCHAR(55)NATIVE CHARACTER(70)
NVARCHAR(100)
TEXTCLOB
TEXT
REALDOUBLEDOUBLE PRECISION
FLOAT
REAL
NUMERIC NUMERIC
Trang 23DECIMAL(10,5)BOOLEAN DATEDATETIME
Bảng 3 Kiểu dữ liệu trong hệ quản trị CSDL Sqlite
Các kiểu dữ liệu trong Sqlite đều là nhưng kiểu dữ liệu trong hầu hết các CSDL.Tuy nhiên, Sqlite không có những kiểu dữ liệu không gian như kiểu point, polygon,path như trong CSDL PostgreSQL Đây cũng là điều hiển nhiên vì PostgreSQL là hệquản trị lớn, nó hỗ trợ nhiều kiểu dữ liệu để phù hợp với nhiều nhu cầu sử dụng khácnhau
1.4.3 Mô hình CSDL
Hệ quản trị CSDL Sqlite được sử dụng dưới dạng thư viện nhúng và không chạytheo kiểu server độc lập Trong khi hệ quản trị CSDL MySQL và PostgreSQL được sửdụng chủ yếu trong các hệ thống sử dụng mô hình Client-Server
Với hệ quản trị MySQL, MySQL phù hợp hệ thống phân tán, hệ thống yêu cầutính bảo mật cao, website và ứng dụng web MySQL không được khuyến khích dùngtrong trường hợp phải tuân thủ đầy đủ các tiêu chuẩn SQL, trong hệ thống đòi hỏi tínhđồng thời cao và hệ thống yêu cầu một số tính năng mà MySQL vẫn còn thiếu như tìmkiếm full-text
Có thể nói, hệ quản trị PostgreSQL tốt hơn cả so với hệ quản trị Sqlite vàMySQL PostgreSQL được khuyên dùng trong nhiều trường hợp mà Sqlite và MySQL
Trang 24khó làm được như hệ thống yêu cầu tính toàn vẹn dữ liệu, CSDL yêu cầu các thủ tụctùy chỉnh, khả năng tích hợp CSDL vào hệ thống và những hệ thống có thiết kế phứctạp Nhưng cũng có một số trường hợp PostgreSQL không được khuyến khích dùngnhư hệ thống yêu cầu tốc độ hoạt động nhanh, và trường hợp mong muốn cài đặt đơngiản.
1.4.5 Ưu điểm và nhược điểm
Mỗi một hệ quản trị CSDL đều có những ưu và nhược điểm Với Sqlite, Sqlite
có những ưu điểm như dung lượng thư viện nhỏ (khoảng 250Kb), mỗi CSDL được lưutrữ trong một tập tin duy nhất, kích thước bản ghi trong CSDL có thể thay đổi và tốc độhoạt động của chúng nhanh Bên cạnh những ưu điểm thì Sqlite còn tồn tại khá nhiềunhược điểm như không hỗ trợ ghi đồng thời, không hỗ trợ một số chuẩn SQL và đặcbiệt là không hỗ trợ GRANT và REVOKE Trong khi đó MySQL và PostgreSQL lạilàm rất tốt các nhược điểm của Sqlite Ngoài ra, MySQL có một số ưu điểm nữa nhưtính bảo mật, nhanh và có khả năng mở rộng PostgreSQL thì có một số ưu điểm là mãnguồn mở, khả năng mở rộng kiểu dữ liệu, mở rộng các hàm PostgreSQL được biếtđến là một hệ quản trị CSDL mạnh, cấu hình phức tạp thì kéo theo đó là hiệu suất hoạtđộng không cao
Ngoài những khác biệt trên, so với hệ quản trị PostgreSQL thì Sqlite có nhữngkhác biệt đáng kể Những khác biệt này được liệt kê trong bảng 1.4
- Định dạng tập tin ứng dụng
- Không có máy chủ
- Tập tin duy nhất trên ổ đĩa
- Tương thích ngược giữa phiên bản
mới và phiên bản cũ
- Chỉ một tập tin ANSI-C
CSDL doanh nghiệpClient / ServerCác tập tin ẩnDump và restore dữ liệuNhiều tập tin nhị phân
Bảng 4 Sự khác biệt giữa hệ quản trị Sqlite và PostgreSQL
Khi chọn lựa sử dụng một hệ quản trị CSDL, người dung cần quan tâm đến cácđặc điểm về kiến trúc, hệ điều hành hỗ trợ… bảng 1.4 đưa ra những thông tin của từng
hệ quản trị CSDL
Trang 25Đặc điểm Sqlite MySQL PostgreSQL
Kiến trúc Mô hình quan hệ Mô hình quan hệ Mô hình quan hệ đối tượng
Hệ điều hành Window, Mac
OS X, Linux, Unix, BSD, Symbian, AmigaOS
z/OS, Window, Mac OS X, Linux, Unix, BSD,
Symbian, AmigaOS
Window, Mac OS X, Linux, BSD
Kiểu hệ thống Kiểu Động Kiểu Tĩnh Kiểu Tĩnh
Chỉ mục Reverse,
Full-text, R-/R+ Tree
Hash, Full-text, /R+ Tree
R-Bitmap, Expression, GIN, GiST, Hash,
Partial, Full-text, /R+ Tree, ReverseĐối tượng khác External Routine,
R-Trigger
Cursor, Function, Procedure,
External Routine, Trigger
Cursor, DataDomain, Function, Procedure, External Routine, Trigger
Chức năng ACID, toàn
vẹn thamchiếu, giaodịch vàUnicode
ACID, toànvẹn thamchiếu, giaodịch vàUnicode
Sao lưu, hàm tùy chọn, khả năng
mở rộng, hỗ trợ định dạng XML, ACID, toàn vẹn tham chiếu, giao dịch và Unicode
Khả năng của
CSDL
Except,Intersect, InnerJoins, InnerSelects, Union
Merge Joins, OuterJoins
Merge Joins, Outer Joins, truy vấn song song, Except, Intersect, InnerJoins, Inner Selects,Union
Bảng 5 So sánh giữa hệ quản trị Sqlite,MySQL và PostgreSQL
Trang 26Chương 2 PHÂN TÍCH MÃ NGUỒN 2.1 Mô hình hoạt động
Nhóm phát triển SQLite công bố đây là một cấu trúc rất modul Cấu trúc bao gồmtám thành phần hệ thống con chính (còn được gọi là modul) cụ thể thành ba thành phần:
hệ thống phân tích Front-end và các công cụ Back-end
Hình 10 Kiến trúc của thư viện SQLite
Các lối vào biên dịch mỗi câu lệnh SQL và các phụ trợ thực hiện các xác nhậnbiên dịch Hai sơ đồ khối cho thấy các hệ thống phụ thành phần và làm thế nào chúngliên hệ với nhau Mỗi một khối là một tệp của các modul
2.1.1 Lối vào (Front-end)
Front-end xác nhận trước quá trình SQL và lệnh SQLite được gửi đến nó như làđầu vào của các ứng dụng Nó phân tích những xác nhận (và lệnh), tối ưu hóa chúng vàtạo các chương trình tương đương với bytecode nội bộ của SQLite mà các phụ trợ có thểthực hiện Front-end phân chia thành ba thành phần modul: thuật toán tách từ (Tokenize),phân tích cú pháp (Parser) và trình tạo mã (Code generator)
Trang 27Hình 11 Hệ thống Front-end
2.1.1.1 Thuật toán tách từ (Tokenizer)
Khi một chuối chứa câu lệnh SQL là để thực thi, giao diện (Interface) truyền rằngchuỗi các thuật toán tách từ (Tokenizer) Công việc của các thuật toán tách từ (Tokenizer)
là để phá vỡ chuỗi tới ban đầu vào những thẻ và vượt qua những thẻ của từng chuỗi một
để phân tích cú pháp Các thuật toán tách từ (Tokenizer) là các mã hóa tay trong C nằm
trong file tokenize.c.
Lưu ý rằng trong thiết kế này, các thuật toán tách từ (Tokenizer) gọi bộ phân tích
cú pháp Những người đã quen thuộc với YACC và BISON có thể được sử dụng để làmmọi thứ theo cách khác xung quanh – có bộ phân tích cú pháp gọi các thuật toán tách từ.Các tác giả của SQLite đã thực hiện nó cả hai cách và thấy việc điều thường làm việcngoài đẹp hơn cho thuật toán tách từ (Tokenizer) để gọi bộ phân tích cú pháp YACC cóngược
2.1.1.2 Bộ phân tích cú pháp (Parser)
Các phân tích cú pháp (Parser) là mảnh mà gán ý nghĩa cho thẻ dựa trên bối cảnhcủa chúng Các phân tích cú pháp (Parser) cho SQLite được tạo ra bằng cách sửa dụngLemon LALR(1) bộ phát phân tích cú pháp (Parser) Lemon hiện công việc giống nhưYACC/BISON, nhưng nó sử dụng một cú pháp đầu vào khác nhau đó là ít dễ bị lỗi.Lemon cũng tạo ra một bộ phân tích cú pháp (Parser) là reentrant và thread-safe VàLemon định nghĩa các khái niệm về một destructor không bị giới hạn để nó không bị rò rỉ
Trang 28bộ nhớ khi các lỗi cú pháp đang gặp phải Các tập tin nguồn mà các ổ đĩa Lemon được
tìm thấy trong parse.y.
Bởi Lemon là một chương trình không thường thấy trên các máy phát triển, các
mã nguồn hoàn chỉnh để Lemon (chỉ cần một tập tin C) được bao gồm trong việc phânphối SQLite trong “công cụ” thư mục con Tài liệu về Lemon được tìm thấy trong “doc”thư mục con của phân phối
Bộ phân tích cú pháp (Parser) phân tích cấu trúc của một câu lệnh SQL bằng cáchphân tích các thẻ được sản xuất bởi các thuật toán tách từ (Tokenizer) và nó tạo ra mộtcây phân tích từ các thẻ (nó thực sự gán ý nghĩa cho thẻ) Nó cũng bao gồm một tối ưuhóa là tái cấu trúc cây phân tích cú pháp và tìm thấy một cây phân tích cú pháp và tìmthấy một cây phân tích cú pháp tương đương rằng sẽ sản xuất một chương trình bytecodehiệu quả
2.1.1.3 Trình tạo mã (Code generator)
Trình tạo mã đi qua một cây phân tích cú pháp (đối với một câu lệnh SQL) và tạo
ra một chương trình bytecode tương đương mà khi được thưc thi bởi các phụ trợ sẽ tạo rahiệu ứng của các câu lệnh SQL
Sau khi phân tích cú pháp (Parser) lắp ráp thẻ vào câu lệnh SQL hoàn chỉnh, nó sẽgọi là trình tạo mã để sản xuất mã máy ảo đó sẽ làm công việc mà các câu lệnh SQL yêu
cầu Có rất nhiều các tập tin trong các trình tạo mã: attach.c, auth.c, build.c, delete.c,
expr.c, insert.c, pragma.c, select.c, trigger.c, update.c, vacuum.c and where.c Trong
những tập tin là nơi mà hầu hết các ảo thuật nguy hiểm xảy ra Expr.c xử lý thế hệ mã cho câu lệnh SQL với cùng tên (Mỗi file gọi công việc thương trong expr.c và where.c khi cần thiết ) Tất cả các câu lệnh SQL khác được mã hóa ra khỏi build.c Các tập tin
auth.c thực hiện các chức năng của sqlite3_set_authorizer().
Hệ thống Front-end thực hiện sqlite3_prepare() trong API chức năng Trong sự chấp hành các chức năng, các bước thế hệ phân tích cú pháp và mã đan xen.
Trang 29Hình 12 Hệ thống Back-end
2.1.2.1 Máy ảo (virtual machine)
Các chương trình được tạo ra bởi các trình tạo mã được thực thi bởi các máy ảo.Các máy ảo thực thi một máy tính trừu tượng được thiết kế được sử dụng để lưu trữ trunggian Mỗi hướng dẫn có chứa một opcode và lên đến ba toán hạng bổ sung Máy ảo thựchiện các chương trình bytecode để thực hiện công việc của các câu lệnh SQL và lệnhSQLite tương ứng Đó là các thao tác dữ liệu cuối cùng từ cơ sở dữ liệu Nó thấy một cơ
sở dữ liệu là một tập hợp các bảng và chỉ mục, nơi một bảng hoặc chỉ là một bộ dữ liệuhoặc hồ sơ
Các máy ảo riêng biệt của mình là hoàn toàn chứa trong một tập tin vdbe.c nguồn duy nhất Các máy ảo cũng có tập tin tiêu đề của riêng mình: vdbe.c định nghĩa một giao diện giữa máy ảo và phần còn lại của thư viện SQLite và vdbeInt.h trong đó xác định cấu trúc tin máy ảo Các tập tin vdbeaux.c chứa các tiện ích được sử dụng bởi các máy
tính và giao diện module ảo được sử dụng bởi phần còn lại của thư viện để xây dựng các
chương trình máy ảo Các tập tin vdbeapi.c chứa các giao diện bên ngoài cho máy ảo như gia đình sqlite3_bind_ các chức năng Giá trị các nhân (chuỗi, số nguyên, số dấu
chấm động và các đốm màu) được lưu trữ trong một đối tượng bên có tên là “Mem” được
thực hiện bởi vdbemem.c
SQLite thực hiện chức năng SQL sử dụng callback thói quen ngôn ngữ C Ngay cảnhững chức năng SQL tích hợp được thực hiện theo cách này Hầu hết các chức năng
Trang 30được xây dựng trong SQL (ví dụ: coalesce() ,count() , substr() , và vv) có thể được tìm thấy trong func.c Ngày và thời gian chuyển đổi chức năng được tìm thấy trong date.c.
2.1.2.2 B-Tree
Một cơ sở dữ liệu SQLite được duy trì trên đĩa bằng cách sử dụng thực hiện
B-Tree được tìm thấy trong tập tin nguồn btree.c Một B-tree riêng biệt được sử dụng cho
mỗi bảng và chỉ mục trong cơ sở dữ liệu Tất cả các B-tree được lưu trữ trong cùng mộttập tin đĩa Chi tiết về các định dạng tập tin được ghi lại trong một chú thích lớn ở đầu
btree.h.
Các giao diện tới hệ thống B-tree được xác định bởi các tập tin tiêu đề btree.h Nó
tổ chức mỗi tuple-set vào một cấu trúc dữ liệu cây ra lệnh; bảng và chỉ mục riêng biệttrong B+ và B-cây, tương ứng Nó giúp các máy ảo để tìm kiếm, chèn, xóa và cập nhậtbản ghi trong cây Nó cũng giúp các máy ảo để tạo ra cây mới và xóa những cây cũ
2.1.2.3 Pager
Các module B-tree yêu cầu thông tin từ các đĩa trong khối kích thước cố định.Kích thước đoạn mặc định là 1024 byte nhưng có thể khác nhau giữa 512 và 6553 byte.Các bộ nhớ trang cache chịu trách nhiệm cho việc đọc, viết và bộ nhớ đệm các khối Cácbộ nhớ trang cache cũng cung cấp các rollback và nguyên tử ủy thác trừu tượng và chămsóc khóa của tập tin cơ sở dữ liệu Người điều khiển B-tree yêu cầu các trang cụ thể từ bộnhớ trang cache và thông báo cho bộ nhớ trang cache khi muốn sửa đổi các trang hoặccam kết hoặc thay đổi rollback Các bộ nhớ trang cache xử lý tất cả các chi tiết lộn xộn đểbảo đảm các yêu cầu được xử lý một cách nhanh chóng, an toàn và hiệu quả
Các mã để thực hiện bộ nhớ trang cache được chứa trong tập tin nguồn C duy nhấtpager.c Các giao diện tới hệ thống bộ nhớ trang cache được xác định bởi các tập tin tiêu
đề pager.h
2.1.2.4 Giao diện hệ điều hành (OS interface)
Để cung cấp tính di động giữa các hệ điều hành POSIX và Win32, SQLite sử dụngmột lớp trừu tượng để giao tiếp với các hệ điều hành.Giao diện cho lớp trừu tượng hệđiều hành được quy định tại os.h.Mỗi hệ điều hành hỗ trợ có thực hiện riêng củamình: os_unix.c cho Unix, os_win.c cho Windows và vv Mỗi của các dụng cụ điều hành
cụ thể thường có tập tin tiêu đề của riêng mình: os_unix.h,os_win.h, vv
2.2 Tổ chức CSDL trong SQLite
2.2.1 View logic
Trang 31Nhiệm vụ chính của một cơ sở dữ liệu SQL là để đánh giá các câu lệnh SQL củaSQL Để thực hiện điều này, các nhà phát triển cần hai đối tượng:
Các đối tượng kết nối cơ sở dữ liệu : sqlite3
Các đối tượng xác nhận chuẩn bị : sqlite3_stmt
Các kết nối cơ sở dữ liệu và xác nhận chuẩn bị các đối tượng được điều khiển bởimột tập hợp nhỏ của giao diện C / C ++ công việc liệt kê dưới đây
Dưới đây là một bản tóm tắt về những gì các giao diện trung tâm làm:
sqlite3_open () Công việc này sẽ mở ra một kết nối đến một tập tin cơ sở dữ
liệu SQLite và trả về một kết nối cơ sở dữ liệu đối tượng Đâythường là API SQLite đầu tiên gọi mà một ứng dụng đi đến
và là một điều kiện tiên quyết đối với hầu hết các API SQLitekhác Nhiều giao diện SQLite yêu cầu một con trỏ đến các đốitượng kết nối cơ sở dữ liệu như tham số đầu tiên của chúng và
có thể được dùng như phương pháp trên các kết nối cơ sở dữliệu đối tượng Thói quen này là các nhà xây dựng cho cácđối tượng kết nối cơ sở dữ liệu
sqlite3_prepare () Công việc này chuyển đổi văn bản SQL vào một xác nhận
chuẩn bị đối tượng và trả về một con trỏ đến đối tượng
đó Giao diện này đòi hỏi một con trỏ kết nối cơ sở dữ liệuđược tạo ra bởi một cuộc gọi trước đó đến sqlite3_open () vàmột chuỗi văn bản có chứa các câu lệnh SQL để được chuẩn
bị API này không thực sự đánh giá các câu lệnh SQL Nó chỉđơn thuần là chuẩn bị các câu lệnh SQL để đánh giá
Hãy suy nghĩ về mỗi câu lệnh SQL như một chương trìnhmáy tính nhỏ Mục đích của sqlite3_prepare () là để biên dịchchương trình đó vào mã đối tượng Các xác nhận chuẩn bị là
mã đối tượng Các giao diện sqlite3_step () sau đó chạy các
Trang 32mã đối tượng để có được một kết quả.
Các ứng dụng mới nên luôn luôn gọi sqlite3_prepare_v2() thay vì sqlite3_prepare () sqlite3_prepare () cũ được giữlại để tương thích ngược Nhưng sqlite3_prepare_v2 () cungcấp một giao diện tốt hơn nhiều
sqlite3_step () Công việc này được sử dụng để đánh giá một xác nhận chuẩn
bị trước đó đã được tạo ra bởi các giao diện sqlite3_prepare() Tuyên bố được đánh giá lên đến điểm mà hàng đầu tiêncủa kết quả có hiệu lực Để tiến tới hàng thứ hai của kết quả,gọi sqlite3_step () một lần nữa Tiếp tục gọi sqlite3_step() cho đến khi xác nhận hoàn tất Xác nhận mà không trả lạikết quả (ví dụ: INSERT, UPDATE, hoặc DELETE) chạy đểhoàn thành một cuộc gọi duy nhất tới sqlite3_step ()
sqlite3_column () Công việc này trả về một cột duy nhất từ hàng hiện tại của
một kết quả thiết lập cho một xác nhận chuẩn bị đang đượcđánh giá bởi sqlite3_step () Mỗi lần sqlite3_step () dừng lạivới một hàng thiết lập kết quả mới, công việc này có thể đượcgọi lài nhiều lần để tìm các giá trị của tất cả các cột tronghàng đó
sqlite3_finalize () Công việc này phá hủy một xác nhận chuẩn bị tạo ra bởi một
cuộc gọi trước tới sqlite3_prepare () Mỗi xác nhận chuẩn bịphải được tiêu huỷ bằng một cuộc gọi đến công viêc này đểtránh rò rỉ bộ nhớ
sqlite3_close () Công việc này đóng một kết nối cơ sở dữ liệu trước đây mở ra
bởi một cuộc gọi đến sqlite3_open () Tất cả các xác nhậnchuẩn bị kết hợp với các kết nối cần được hoàn thiện trướckhi đóng kết nối
2.2.2 File physical
Như đã nêu ở chương 1, Sqlite tuy là một CSDL nhỏ, nhưng nó cung cấp đầy đủcác tính năng và khả năng mà một hệ quản trị CSDL có Sqlite được thiết kế nhẹ và khépkín; một tập tin tiêu đề, một thư viện và không yêu cầu CSDL bên ngoài Tất cả mọi đốitượng được đóng gói, dung lượng nhỏ hơn một nửa megabyte Ngoài ra, tập tin CSDL
Trang 33Sqlite cũng nhỏ gọn, chúng là những tập tin hệ thống thông thường Tất cả các đối tượngtrong CSDL như bảng, bộ kích hoạt, lược đồ, chỉ mục và khung nhìn đều được chứatrong một tập tin CSDL duy nhất Theo hướng dẫn sử dụng sqlite từ trang chủSQLite.org, chúng ta chỉ cần một công cụ được download về từ địa chỉ web của SQLite
là công cụ: sqlite3.exe
Chúng ta đưa công cụ sqlite3.exe đến nơi mà chúng ta muốn lưu trữ CSDL, ở đây
ta để vào ổ C:\Sqlite3 với sqlite3 là thư mục mà ta đã tạo
Hình 13 Thư mục chứa công cụ sqlite3.exe
Sau đó, ở cửa sổ của command prompt ta dùng lệnh cd để thao tác chuyển đến
thư mục Sqlite3 ở trên
Hình 14 Sử dụng lệnh cd để đến thư mục chứa công cụ sqlite3.exe