Trong bài học này chúng ta sẽ cùng tìm hiểu về một khái niệm quá lạ trong SQLite
đó là mệnh đề INDEXED BY
. Vậy mệnh đề INDEXED BY
trong SQLite
là gì? INDEXED BY
trong SQLite
được sử dụng như thế nào? Chúng ta sẽ cùng tìm hiểu trong nội dung tiếp theo.
1. INDEXED BY trong SQLite là gì?
Mệnh đề “INDEXED BY index-name” chỉ định rằng index-name
phải được sử dụng để tìm kiếm các giá trị trên preceding table.
Nếu index-name
không tồn tại hoặc không thể được sử dụng cho truy vấn, thì việc chuẩn bị câu lệnh SQLite
thất bại.
Mệnh đề “NOT INDEXED” chỉ định rằng không có index nào được sử dụng khi truy cập vào preceding table, bao gồm các implied index
được tạo bởi các ràng buộc UNIQUE
và PRIMARY KEY
.
Bài viết này được đăng tại [kiso.vn]
Tuy nhiên, INTEGER PRIMARY KEY
vẫn có thể được sử dụng để tìm kiếm các entry ngay cả khi “NOT INDEXED” được chỉ định.
2. Cú pháp INDEXED BY trong SQLite
Sau đây là cú pháp cho mệnh đề INDEXED BY
trong SQLite
và INDEXED BY
có thể được sử dụng với câu lệnh DELETE
, UPDATE
hoặc SELECT
.
SELECT|DELETE|UPDATE column1, column2... INDEXED BY (index_name) table_name WHERE (CONDITION);
3. Ví dụ INDEXED BY trong SQLite
Giả sử chúng ta có bảng COMPANY
có cấu trúc định nghĩa bảng như sau:
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Chúng ta sẽ sử dụng lệnh INSERT
để chèn dữ liệu vào bảng COMPANY
như sau:
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (5, 'David', 27, 'Texas', 85000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 ); INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
Bây giờ chúng ta sẽ tạo một index và sử dụng nó để thực hiện thao tác INDEXED BY
.
sqlite> CREATE INDEX salary_index ON COMPANY(salary); sqlite>
Bây giờ để lấy dữ liệu từ bảng COMPANY
, chúng ta có thể sử dụng mệnh đề INDEXED BY
như sau:
sqlite> SELECT * FROM COMPANY INDEXED BY salary_index WHERE salary > 5000;
Điều này sẽ tạo ra kết quả sau đây:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 7 James 24 Houston 10000.0 2 Allen 25 Texas 15000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chính1. INDEXED BY trong SQLite là gì?2. Cú pháp INDEXED...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. INDEXED BY trong SQLite là gì?2. Cú pháp INDEXED BY trong SQLite3. Ví dụ INDEXED BY trong SQLite1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên Linux...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chính1. INDEXED BY trong SQLite là gì?2. Cú pháp INDEXED BY trong SQLite3. Ví dụ INDEXED BY trong SQLiteV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng khi...
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. INDEXED BY trong SQLite là gì?2. Cú pháp INDEXED BY trong SQLite3. Ví dụ INDEXED BY trong SQLiteV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra khi...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. INDEXED BY trong SQLite là gì?2. Cú pháp INDEXED BY trong SQLite3. Ví dụ INDEXED BY trong SQLiteIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác nhau,...