Các ứng dụng tương tác với cơ sở dữ liệu SQLite đọc và ghi trực tiếp từ các tệp cơ sở dữ liệu được lưu trữ trên đĩa.. Ứng dụng lớn và phức tạp: SQLite không được thiết kế để xử lý các ứn
Trang 1TRƯỜNG ĐẠI HỌC NGÂN HÀNG THÀNH PHỐ HỒ CHÍ MINH
Sinh viên thực hiên : Nhóm 7
TP Hồ Chí Minh, ngày 29 tháng 5 năm
2023
BÀI TẬP NHÓM
KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
ĐỀ TÀI : TÌM HIỂU VỀ SQLITE
-Phạm Minh Châu
- Lê Nguyễn Thùy Linh
- Phan Kim Ngân
- Bùi Kim Thanh
- Tô Hoàng Mỹ Linh
Trang 2MỤC LỤC
1 TỔNG QUAN VỀ SQLite 1
1.1 Giới thiệu về SQLite 1
1.2 Lịch sử hình thành và phát triển 2
1.3 Các phiên bản SQLite nổi bật 3
2 Tính năng 5
2.1 Ưu và nhược điểm so với các hệ quản trị khác 5
2.1.1 Ưu điểm 5
2.1.2 Nhược điểm 5
2.2 Các lỗ hổng Sqlite 6
3.Các ứng dụng của SQLite trong cuộc sống 7
4 Các toán tử trong SQLite 8
4.1 Toán tử số học 8
4.2 Toán tử so sánh 9
4.3 Toán tử logic 10
4.4 Toán tử bitwise 11
5 Các kiểu dữ liệu cơ bản trong SQLite 12
5.1 Class lưu trữ kiểu dữ liệu trong SQLite 13
5.2 Kiểu dữ liệu Boolean trong SQLite 14
5.3 Kiểu dữ liệu date and time trong SQLite 14
6 Cách tạo bảng và xóa bảng 15
6.1 Tạo bảng 15
6.2 Xóa bảng 15
7 Lệnh Insert, Update, Delete dữ liệu - Mệnh đề Where 15
7.1 Cú pháp lệnh Insert 15
7.2 Cú pháp lệnh Update + Where 16
7.3 Cú pháp lệnh Delete + WHERE 16
8 Ràng buộc trong SQLite 17
8.1 Ràng buộc là gì? 17
8.2 Các ràng buộc phổ biến trong SQLite: 17
9 Mệnh đề LIKE, GLOB, LIMIT và DISTINCT 17
9.1 Mệnh đề LIKE 17
9.2 Mệnh đề GLOB 18
9.3 Mệnh đề LIMIT 18
9.4 Mệnh đề DISTINCT 18
10 Select, Order By, Group By, Having 19
10.1 SELECT 19
10.2 ORDER BY 19
10.3 GROUP BY 20
10.4 HAVING 20
11 Lệnh JOIN 20
11.1 Lệnh Join trong SQLite là gì? 20
11.2 CROSS JOIN trong SQLite 21
11.3 INNER JOIN trong SQLite 21
11.4 OUTER JOIN trong SQLite 21
12 Một số hàm trong SQLite 22
Tài liệu tham khảo 23
DANH MỤC HÌNH ẢNH 25
DANH MỤC BẢNG BIỂU 26
Trang 31 TỔNG QUAN VỀ SQLite
1.1 Giới thiệu về SQLite
SQLite là thư viện phần mềm cung cấp hệ quản trị cơ sở dữ liệu quan hệ, được viết dưới dạng dưới dạng thư viện bằng ngôn ngữ lập trình C Chữ Lite trong SQLite có nghĩa là nhẹ về thiết lập, quản trị cơ sở dữ liệu và các tài nguyên cần thiết Hoạt động đa nền tảng
có sẵn trên Android, BSD, iOS, Linux, Mac, Solaris, Windows, dễ dàng dịch chuyển sang các hệ thống khác
SQLite có các tính năng đáng chú ý sau: khép kín, không có máy chủ, không cấu hình, giao dịch
- Không có máy chủ
Thông thường, một RDBMS như MySQL, PostgreSQL, v.v., yêu cầu một quy trình máy chủ riêng để hoạt động Các ứng dụng muốn truy cập máy chủ cơ sở dữ liệu sử dụng giao thức TCP/IP để gửi và nhận yêu cầu Đây được gọi là kiến trúc máy khách/máy chủ
Hình 1 Sơ đồ minh họa kiến trúc máy khách/máy chủ RDBMS
SQLite không hoạt động theo cách này SQLite không yêu cầu máy chủ chạy Cơ sở dữ
liệu SQLite được tích hợp với ứng dụng truy cập cơ sở dữ liệu Các ứng dụng tương tác với cơ sở dữ liệu SQLite đọc và ghi trực tiếp từ các tệp cơ sở dữ liệu được lưu trữ trên đĩa
Hình 2 Sơ đồ minh họa kiến trúc SQLite không máy chủ
- Khép kín
SQLite yêu cầu hỗ trợ tối thiểu từ hệ điều hành hoặc thư viện bên ngoài Điều này làm choSQLite có thể sử dụng được trong mọi môi trường, đặc biệt là trong các thiết bị nhúng như iPhone, điện thoại Android, bảng điều khiển trò chơi, trình phát phương tiện cầm tay, v.v
Trang 4SQLite được phát triển bằng ANSI-C Mã nguồn có sẵn dưới dạng tệp sqlite3.c lớn và tệp tiêu đề của nó sqlite3.h Nếu bạn muốn phát triển một ứng dụng sử dụng SQLite, bạn chỉ cần thả các tệp này vào dự án của mình và biên dịch nó bằng mã của bạn
- Không cấu hình
Do kiến trúc không có máy chủ, bạn không cần phải “cài đặt” SQLite trước khi sử dụng Không có quy trình máy chủ nào cần được định cấu hình, bắt đầu và dừng Ngoài ra, SQLite không sử dụng bất kỳ tệp cấu hình nào
- Giao dịch
Tất cả các giao dịch trong SQLite đều hoàn toàn tuân thủ ACID Điều đó có nghĩa là tất cảcác truy vấn và thay đổi đều nguyên tử, nhất quán, biệt lập và lâu bền Nói cách khác, tất
cả các thay đổi trong một giao dịch diễn ra hoàn toàn hoặc hoàn toàn không xảy ra ngay
cả khi xảy ra tình huống không mong muốn như sự cố ứng dụng, mất điện hoặc sự cố hệ điều hành
- Các tính năng đặc biệt khác của SQLite
· SQLite sử dụng các kiểu động cho bảng Điều đó có nghĩa là bạn có thể lưu trữ bất kỳ giá trị nào trong bất kỳ cột nào, bất kể loại dữ liệu
· SQLite cho phép một kết nối cơ sở dữ liệu duy nhất truy cập đồng thời nhiều tệp cơ sở dữ liệu Điều này mang lại nhiều tính năng hay như nối các bảng trong các cơ sở dữ liệu khác nhau hoặc sao chép dữ liệu giữa các cơ sở dữ liệu trong một lệnh
· SQLite có khả năng tạo cơ sở dữ liệu trong bộ nhớ hoạt động rất nhanh
1.2 Lịch sử hình thành và phát triển
Trang 51.3 Các phiên bản SQLite nổi bật
Trang 64
Trang 72 Sqlite là phần mềm tự do với mã nguồn mở và miễn phí Bất kỳ ai có thể sử dụng nó miễn phí và có thể tùy chỉnh mã nguồn theo nhu cầu của họ.
3 Nhỏ gọn và tốc độ cao: với cấu hình đầy đủ chỉ không đầy 300 KB và không yêu cầu cài đặt phức tạp Tốc độ xử lý rất nhanh, cho phép xử lý dữ liệu ở tốc độ cao trong các ứng dụng nhỏ
4 Không yêu cầu máy chủ: SQLite có thể được sử dụng trên máy tính độc lập mà không cần phải thiết lập máy chủ CSDL riêng biệt Điều này giúp giảm chi phí phát triển và triển khai ứng dụng
5 Hỗ trợ tốt cho nhiều ngôn ngữ lập trình: SQLite được hỗ trợ trên hầu hết các ngôn ngữlập trình phổ biến như C/C++, Java, Python, PHP,
6 Tính bảo mật cao: hỗ trợ mã hóa và có tính bảo mật cao Dữ liệu được lưu trữ trong SQLite có thể được mã hóa để đảm bảo an toàn
7 Tin cậy: các hoạt động transaction (chuyển giao) nội trong cơ sở dữ liệu được thực hiện trọn vẹn, không gây lỗi khi xảy ra sự cố phần cứng
8 Hỗ trợ hầu hết các tính năng của ngôn ngữ truy vấn SQL theo chuẩn SQL 92 (chỉ có một vài đặc điểm không hỗ trợ)
9 SQLite tuân thủ 4 tính chất ACID (là tính nguyên tổ (Atomic), tính nhất quán (Consistent), tính cô lập (Isolated), và tính bền vững (Durable) )
2.1.2 Nhược điểm
1 Quản lý người dùng: SQLite thiếu khả năng đa người dùng có thể được tìm thấy trong các hệ thống RDBMS chính thức như MySQL và PostgreSQL Điều này dẫn đến việc thiếu kiểm soát truy cập chi tiết, hệ thống quản lý người dùng thân thiện và khả năng bảo mật ngoài việc mã hóa chính tệp cơ sở dữ liệu
2 Ứng dụng lớn và phức tạp: SQLite không được thiết kế để xử lý các ứng dụng lớn và phức tạp, vì nó không hỗ trợ các tính năng như chia sẻ nhiều kết nối, khả năng mở rộng và sửa đổi cấu trúc dữ liệu khi chạy
3 Ứng dụng có tần suất ghi dữ liệu cao: SQLite là một DBMS dựa trên tệp,có thể gây ra các vấn đề về hiệu suất với các bộ dữ liệu lớn do các giới hạn của hệ thống tệp Sqlite không hỗ trợ các tính năng như phân hoá ,phục hồi để khắc phục các sai sót khi ghi dữliệu.Sử dụng cơ chế coarse-gained locking nên trong cùng một thời điểm có thể hỗ trợ nhiều người đọc dữ liệu, nhưng chỉ có 1 người có thể ghi
SQLite không phải là lựa chọn hoàn hảo để đáp ứng các nhu cầu xử lý trên một khối lượng dữliệu lớn, phát sinh liên tục Nguyên tắc chung là bạn nên tránh sử dụng SQLite trong các tình
Trang 8sử dụng Điều này càng làm phạm vi ảnh hưởng của lỗ hổng như Mag Magellan có phạm vi ảnh hưởng rộng hơn.
Theo các chuyên gia bảo mật, nếu lỗ hổng này khai thác thành công nó sẽ cho phép tin tặc có quyền truy cập từ xa vào cơ sở dữ liệu SQLite để thực thi mã độc hại tiềm tàng, thậm chí làm sập trình duyệt web của người dùng
● Lỗ hổng Magellan
Magellan gây nguy cơ tin tặc tấn công hàng triệu ứng dụng Lỗ hổng có thể cho phép kẻ tấn công từ xa thực thi mã tùy ý hoặc mã độc trên các thiết bị bị ảnh hưởng để gây rò rỉ bộ nhớ chương trình hoặc làm sập ứng dụng
Do các trình duyệt web xây dựng dựa trên Chromium (gồm Google Chrome, Opera, Vivaldi
và Brave) hỗ trợ SQLite thông qua API cơ sở dữ liệu SQL quá hạn, kẻ tấn công từ xa có thể
dễ dàng tấn công người dùng các trình duyệt bị ảnh hưởng chỉ bằng cách thuyết phục họ truy cập một trang web tự tạo
SQLite đã phát hành phiên bản 3.26.0 để giải quyết Magellan Google cũng đã phát hành phiên bản Chromium 71.0.3578.80 để khắc phục sự cố và tung bản đã vá lên phiên bản mới nhất của trình duyệt web Google Chrome và Brave
3.Các ứng dụng của SQLite trong cuộc sống
● Cơ sở dữ liệu cho websites
Bởi vì SQLite không yêu cầu cấu hình và lưu trữ thông tin trong các tệp đĩa thông thường nênSQLite là lựa chọn phổ biến làm cơ sở dữ liệu để quay lại các trang web vừa và nhỏ (thường
là các trang web tĩnh hoặc ít hơn 100 ngàn lượt truy cập/ngày)
Trang web SQLite (https://www.sqlite.org/), xử lý khoảng 400 nghìn đến 500 nghìn yêu cầu HTTP mỗi ngày, khoảng 15-20% trong số đó động chạm vào CSDL Thiết lập chạy trên một máy ảo duy nhất chia sẻ một máy chủ vật lý với 23 máy chủ khác và vẫn giữ mức trung bình tải dưới 0,1 hầu hết thời gian
Ngoài ra, SQLite còn được Firefox sử dụng với các tiện ích như: SQLite Manager, SQLite Viewer,
Trang 9● Lưu trữ dữ liệu trong hệ điều hành
di động
Hệ điều hành, phần không thể thiếu trên mọi
thiết bị di động (iOS, Android, BlackBerry, ) đều sử dụng Sqlite để lưu trữ dữ liệu và đã được cài sẵn với mục đích tạo
điều kiện cho việc phát triển và sử dụng hệ quản trị cơ sở dữ liệu
● Mã hóa cho cơ sở dữ liệu nhúng và
di động
SQLite sử dụng SQLCipher để tăng độ bảo mật nhằm phòngtránh các rủi ro tiềm ẩn bị lấy cắp và chia sẻbất hợp pháp việc sử dụng các ứng dụng để lưu trữ dữ liệu cá nhân hoặc các thông tin quan trọng
Nhờ vào chi phí hoạt động thấp , kích thước nhỏ gọn nó nhanh chóng trở nên phổ biến đối vớicác nhà phát triển ứng dụng trên nền tảng iOS và hiện là giải pháp bảo mật CSDL được sử dụng nhiều nhất
● Cơ sở dữ liệu cho Internet Of Things
SQLite với dung lượng nhẹ hơn (thư viện nén với dung lượng nội dung khoảng 300KB, nếu
bỏ qua các tùy chọn không cần thiết thì con số bạn có được là 180KB Đồng thời, thiết kế Sqlite trong ngăn xếp là 4KB và trong heap là 100KB)
Bên cạnh đó, với trường hợp tính toán phức tạp, Sqlite lưu trữ kết quả một lần vào CSDL và không tính lại nhiều lần giúp việc xử lý hiệu quả, không làm gián đoạn hay tốn bộ nhớ xử lý
Vì vậy mà Sqlite luôn là một sự lựa chọn hàng đầu về việc lưu trữ dữ liệu cho các thiết bị có
bộ nhớ hạn chế như điện thoại di động, PDA và máy nghe nhạc MP3
Hình 6 Xử lý dữ liệu khi có (b) hoặc không có SQLCipher (a)
Trang 104 Các toán tử trong SQLite
Toán tử là một từ dành riêng hoặc một ký tự được sử dụng chủ yếu trong mệnh đề WHERE của câu lệnh SQlite để thực hiện các thao tác Trong SQLite có 4 loại toán tử: toán tử số học, toán tử so sánh, toán tử logic, toán tử bitwise
Trang 119
Trang 1210
Trang 224.3 Toán tử logic
Trang 2321
Trang 384.4 Toán tử bitwise
Toán tử bitwise hoạt động trên bit và thực hiện thao tác từng bit
Trang 3937
Trang 44Giả sử nếu A = 60; và B = 13, sau đó ở định dạng nhị phân, chúng sẽ như sau:
Trang 4543
Trang 515 Các kiểu dữ liệu cơ bản trong SQLite
Khi tạo bảng, một trong những yếu tố tất yếu mà ta cần có chính là kiểu dữ liệu Mỗi cột, biến
và biểu thức có kiểu dữ liệu liên quan trong SQLite
5.1 Class lưu trữ kiểu dữ liệu trong SQLite
Lớp lưu trữ trong SQLite là khá chung chung so với một kiểu dữ liệu Như,trong lớp lưu trữ TEXT sẽ gồm nhiều kiểu chuỗi có độ dài khác nhau
NULL Giá trị là giá trị NULL
INTEGER Giá trị là số nguyên có dấu, lưu
trữ trong 1, 2, 3, 4, 6 hoặc 8 byte
tùy thuộc vào độ lớn của giá trị
Tương đương với kiểu Long
trong Java
INT,INTEGER,TINYINT, SMALLINT,MEDIUMINT, BIGINT
REAL Giá trị này là một giá trị dấu
phẩy động, được lưu dưới dạng
số dấu phẩy động 8 byte của
IEEE.Tương đương với Double
trong Java
REAL,DOUBLE,DOUBLE PRECISION, FLOAT
TEXT Giá trị là một chuỗi ký tự, có thể
lưu trữ các giá trị chứa ký tự
Unicode Bằng cách sử dụng mã
hóa cơ sở dữ liệu (8,
UTF-16BE hoặc UTF-16LE)
CHARACTER(20),VARCHAR(255),VARYING,CHARACTER(255),NCHAR(55),NATIVE,TEXT, CLOB,CHARACTER(70),NVARCHAR(100)
BLOB Giá trị là kiểu đối tượng nhị
phân,lưu trữ các đối tượng như
hình ảnh, âm thanh, video và tệp
lưu trữ khác Được lưu trữ chính
xác như đầu vào
Không chỉ ra kiểu dữ liệu cụ thể
NUMERIC lưu trữ giá trị số dưới dạng một
chuỗi ký tự, số, thập phân Giúp
NUMERIC,DECIMAL(10,5), BOOLEAN, DATE, DATETIME
Trang 52lưu trữ các giá trị số với chính
xác cao hơn
Bảng 6 Các Class lưu trữ kiểu dữ liệu trong SQLite
5.2 Kiểu dữ liệu Boolean trong SQLite
SQLite không có lớp lưu trữ Boolean( luận lý ) Thay vào, các giá trị Boolean được lưu dưới dạng số nguyên với 0 (false) và 1 (true)
5.3 Kiểu dữ liệu date and time trong SQLite
SQLite lưu trữ ngày và thời gian dưới dạng các giá trị TEXT, REAL hoặc INTEGER
Class lưu trữ Định dạng thời gian
TEXT Một ngày ở định dạng như "YYYY-MM-DD HH: MM: SS.SSS"REAL Số ngày từ Greenwich November 24, 4714 B.C
INTEGER Số giây kể từ 1970-01-01 00:00:00 UTC
Bảng 7 Các Class lưu trữ kiểu dữ liệu date and time trong SQLite
❖ Ta có thể chọn hàm bất kỳ, Sqlite sẽ cung cấp hàm giúp chuyển đổi giữa các định dạng SQLite cũng có thể lưu được cả hình ảnh nếu chuyển đổi dữ liệu sang dạng Base64 Lưu ý là với cách này thì dung lượng dữ liệu sẽ bị dội lên
Tất cả các loại dữ liệu đều phải chuyển đổi sang 3 dạng ( TEXT, INTEGER, REAL)
để có thể chèn vào trong bảng Tuy nhiên SQLite không kiểm tra dữ liệu Tức là bạn
có thể chèn dữ liệu TEXT vào column dữ liệu dạng INTEGER
6 Cách tạo bảng và xóa bảng
6.1 Tạo bảng
Lệnh CREATE TABLE trong SQLite được sử dụng để tạo một bảng mới trong bất kỳ cơ sở
dữ liệu đã cho nào Về cơ bản, tạo một bảng là cung cấp tên bảng và định nghĩa các cột của nócũng như kiểu dữ liệu của mỗi cột
Cú pháp:
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
columnN datatype,
);
CREATE TABLE là từ khóa cho hệ thống để tạo một bảng mới
Tên hoặc định danh duy nhất cho bảng theo sau lệnh CREATE TABLE này Bạn có thể xác định tùy ý database name với table name
Trang 53Cú pháp cơ bản của truy vấn UPDATE kết hợp với mệnh đề WHERE như sau:
Nếu bạn muốn sửa đổi tất cả các giá trị của cột ADDRESS và cột SALARY trong bảng COMPANY, bạn không cần sử dụng mệnh đề WHERE, truy vấn UPDATE sẽ như sau:
7.3 Cú pháp lệnh Delete + WHERE
Cú pháp cơ bản của truy vấn DELETE kết hợp với mệnh đề WHERE như sau:
Trang 548.2 Các ràng buộc phổ biến trong SQLite:
NOT NULL: đảm bảo rằng dữ liệu trong cột không nhận giá trị NULL
DEFAULT: Cung cấp cho cột giá trị mặc định nếu dữ liệu của cột chưa được xác định hoặc nhập vào
UNIQUE: Đảm bảo dữ liệu trong cùng một cột khác nhau, không trùng lặp giá trị
PRIMARY KEY (Khóa chính): Dùng để thiết lập khóa chính trên bảng Dữ liệu trên cột đượcxác định là khóa chính phải là duy nhất, không được trùng nhau Đồng thời, khi sử dụng ràng buộc khóa chính với cột hoặc các cột, yêu cầu cột hoặc các cột phải NOT NULL
CHECK: Nhằm bảo đảm tất cả các giá trị trong một cột thoả mãn điều kiện cụ thể
9 Mệnh đề LIKE, GLOB, LIMIT và DISTINCT
9.1 Mệnh đề LIKE
Mệnh đề LIKE được sử dụng để so sánh một giá trị với các giá trị tương tự Nếu biểu thức tìmkiếm khớp với mẫu, thì LIKE sẽ trả về true, mà là 1 Hai ký tự được sử dụng kết hợp với toán
tử LIKE là:
● Ký hiệu phần trăm (%): biểu diễn 0, 1 hoặc một chuỗi ký tự
● Dấu gạch dưới (_): biểu diễn một số hoặc một ký tự đơn
Cú pháp cơ bản của % và _ trong SQLite là:
Ví dụ : SELECT * FROM customers WHERE name LIKE '%J%';
Câu lệnh sẽ trả về các bản ghi trong bảng khách hàng có tên bắt đầu bằng chữ ‘J’
9.2 Mệnh đề GLOB
GLOB là một phiên bản của LIKE Được sử dụng để so khớp một giá trị với các giá trị tương
tự Phân biệt kiểu chữ và nó theo cú pháp của UNIX và thay vì sử dụng % và _ nó sử dụng:
● Dấu sao (*): biểu diễn 0, 1 hoặc nhiều số hoặc ký tự
● Dấu hỏi chấm (?): biểu diễn một số hoặc một ký tự đơn
Cú pháp: