Lệnh PRAGMA trong SQLite
Lệnh PRAGMA
trong SQLite
là một lệnh đặc biệt được sử dụng để kiểm soát các biến môi trường và cờ (flag) trạng thái khác nhau trong môi trường SQLite
.
1. Cú pháp lệnh PRAGMA trong SQLite
Để truy vấn giá trị PRAGMA
hiện tại, chỉ cần cung cấp tên của pragma
.
PRAGMA pragma_name;
Để đặt giá trị mới cho PRAGMA
, hãy sử dụng cú pháp sau.
PRAGMA pragma_name = value;
Chế độ đặt có thể là tên hoặc số nguyên tương đương nhưng giá trị được trả về sẽ luôn là số nguyên.
Bài viết này được đăng tại [free tuts .net]
2. Pragma auto_vacuum trong SQLite
Pragma auto_vacuum
trong SQLite
được dùng để get hoặc set auto-vacuum
mode. Cú pháp như sau:
PRAGMA [database.]auto_vacuum; PRAGMA [database.]auto_vacuum = mode;
Mode
có thể là bất kỳ giá trị sau đây:
Giá trị Pragma | Mô tả |
0 hoặc NONE | Auto-vacuum bị vô hiệu hóa (disabled). Đây là chế độ mặc định có nghĩa là file cơ sở dữ liệu sẽ không bao giờ thu nhỏ kích thước trừ khi nó được thiết lập bằng tay bằng lệnh VACUUM. |
1 hoặc FULL | Auto-vacuum được bật (enabled) và tự động cho phép thu nhỏ file cơ sở dữ liệu khi dữ liệu được xóa khỏi cơ sở dữ liệu. |
2 hoặc INCREMENTAL | Auto-vacuum được kích hoạt (enabled) nhưng phải được kích hoạt bằng tay. Trong chế độ này, dữ liệu tham chiếu được duy trì, nhưng free pages chỉ đơn giản được đưa vào free list. Những trang này có thể được phục hồi bằng cách sử dụng pragma incremental_vacuum bất cứ lúc nào. |
3. Pragma cache_size trong SQLite
Pragma cache_size
được dùng để get hoặc set kích thước tối đa tạm thời của bộ đệm trang (page cache) trong bộ nhớ. Cú pháp như sau:
PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = pages;
Giá trị pages đại diện cho số lượng trang trong bộ đệm. Page cache
có kích thước mặc định 2.000 trang và kích thước tối thiểu 10 trang.
4. Pragma case_sensitive_like trong SQLite
Pragma case_sensitive_like
điều khiển chế độ phân biệt chữ hoa chữ thường của biểu thức LIKE
. Theo mặc định, pragma này là false, có nghĩa là toán tử LIKE bỏ qua phân biệt hoa thường. Cú pháp như sau:
PRAGMA case_sensitive_like = [true|false];
Không có cách nào để truy vấn trạng thái hiện tại của pragma này.
5. Pragma count_changes trong SQLite
Pragma count_changes
được dùng để get hoặc set giá trị trả về của các câu lệnh thao tác dữ liệu như INSERT
, UPDATE
và DELETE
. Cú pháp như sau:
PRAGMA count_changes; PRAGMA count_changes = [true|false];
Theo mặc định, pragma này là false và các câu lệnh này không trả lại bất cứ điều gì. Nếu được đặt thành true, mỗi câu lệnh ở trên sẽ trả về một bảng một cột, một hàng bao gồm một giá trị số nguyên duy nhất cho biết các hàng bị ảnh hưởng bởi thao tác.
6. Pragma database_list trong SQLite
Pragma database_list
được sử dụng để liệt kê tất cả các attached databases. Cú pháp như sau:
PRAGMA database_list;
Pragma này sẽ trả về một bảng ba cột với một hàng trên mỗi cơ sở dữ liệu mở hoặc đính kèm với số thứ tự cơ sở dữ liệu, tên của nó và file được liên kết.
7. Pragma encoding trong SQLite
Pragma encoding
dùng để kiểm soát cách các chuỗi được mã hóa và lưu trữ trong một file cơ sở dữ liệu. Cú pháp như sau:
PRAGMA encoding; PRAGMA encoding = format;
Giá trị định dạng có thể là một trong các giá trị định dạng như UTF-8
, UTF-16le
hoặc UTF-16be
.
8. Pragma freelist_count trong SQLite
Pragma freelist_count
trả về một số nguyên duy nhất cho biết có bao nhiêu trang cơ sở dữ liệu hiện được đánh dấu là free và available. Cú pháp như sau:
PRAGMA [database.]freelist_count;
Giá trị định dạng có thể là một trong giá trị định dạng như UTF-8
, UTF-16le
hoặc UTF-16be
.
9. Pragma index_info trong SQLite
Pragma index_info
trả về thông tin về một chỉ mục cơ sở dữ liệu. Cú pháp như sau:
PRAGMA [database.]index_info( index_name );
Tập kết quả sẽ chứa một hàng cho mỗi cột có trong chuỗi cột cho chỉ mục, chỉ mục cột có tên trong bảng và tên cột.
10. Pragma index_list trong SQLite
Pragma index_list
liệt kê tất cả các chỉ mục được liên kết với một bảng. Cú pháp như sau:
PRAGMA [database.]index_list( table_name );
Tập kết quả sẽ chứa một hàng cho mỗi chỉ mục đưa ra chuỗi chỉ mục, tên chỉ mục và cờ cho biết liệu chỉ mục có duy nhất hay không.
11. Pragma journal_mode trong SQLite
Pragma journal_mode
được dùng để get hoặc set journal mode kiểm soát cách lưu trữ và xử lý journal file. Cú pháp như sau:
PRAGMA journal_mode; PRAGMA journal_mode = mode; PRAGMA database.journal_mode; PRAGMA database.journal_mode = mode;
Có 5 journal mode được hỗ trợ trong SQLite được liệt kê trong bảng sau.
Giá trị | Mô tả |
DELETE | Đây là mode mặc định. Ở đây khi kết thúc một giao dịch, journal file sẽ bị xóa. |
TRUNCATE | Journal file được cắt ngắn đến độ dài bằng 0 byte |
PERSIST | Journal file được đặt đúng chỗ, nhưng tiêu đề được ghi đè để cho biết journal không còn hiệu lực. |
MEMORY | Bản ghi journal được giữ trong bộ nhớ, thay vì trên đĩa. |
OFF | Không có bản ghi journal được lưu giữ. |
12. Pragma max_page_count trong SQLite
Pragma max_page_count
được dùng để get hoặc set số lượng trang tối đa được phép cho cơ sở dữ liệu. Cú pháp như sau:
PRAGMA [database.]max_page_count; PRAGMA [database.]max_page_count = max_page;
Giá trị mặc định là 1.073.741.823 là một giga-page
, có nghĩa là nếu kích thước trang 1 KB mặc định, điều này cho phép cơ sở dữ liệu tăng lên đến một terabyte.
13. Pragma page_count trong SQLite
Pragma page_count
trả về số lượng trang hiện tại trong cơ sở dữ liệu. Cú pháp như sau:
PRAGMA [database.]page_count;
Kích thước của file cơ sở dữ liệu phải là page_count * page_size.
14. Pragma page_size trong SQLite
Pragma page_size
được dùng để get hoặc set kích thước của các trang cơ sở dữ liệu. Cú pháp như sau:
PRAGMA [database.]page_size; PRAGMA [database.]page_size = bytes;
Theo mặc định, kích thước được phép là 512, 1024, 2048, 4096, 8192, 16384 và 32768 byte. Cách duy nhất để thay đổi kích thước trang trên cơ sở dữ liệu hiện tại là đặt kích thước trang và sau đó VACUUM ngay lập tức cơ sở dữ liệu.
17. Pragma parser_trace trong SQLite
Pragma parser_trace
kiểm soát việc in trạng thái debug khi nó phân tích các lệnh SQL. Cú pháp như sau:
PRAGMA parser_trace = [true|false];
Theo mặc định, nó được đặt thành false nhưng khi được bật bằng cách đặt thành true, trình phân tích cú pháp SQL sẽ in trạng thái của nó khi phân tích cú pháp các lệnh SQL.
18. Pragma recursive_triggers trong SQLite
Pragma recursive_triggers
được dùng để get hoặc set chức năng kích hoạt đệ quy. Cú pháp như sau:
PRAGMA recursive_triggers; PRAGMA recursive_triggers = [true|false];
19. Pragma schema_version trong SQLite
Pragma schema_version
được dùng để get hoặc set giá trị phiên bản lược đồ được lưu trữ trong tiêu đề cơ sở dữ liệu. Cú pháp như sau:
PRAGMA [database.]schema_version; PRAGMA [database.]schema_version = number;
Đây là giá trị nguyên được ký 32 bit, theo dõi các thay đổi của lược đồ. Bất cứ khi nào một lệnh thay đổi lược đồ được thực thi (như, CREATE
... hoặc DROP
...), giá trị này sẽ tăng lên.
20. Pragma secure_delete trong SQLite
Pragma secure_delete
được sử dụng để kiểm soát cách xóa nội dung khỏi cơ sở dữ liệu. Cú pháp như sau:
PRAGMA secure_delete; PRAGMA secure_delete = [true|false]; PRAGMA database.secure_delete; PRAGMA database.secure_delete = [true|false];
Giá trị mặc định cho cờ xóa an toàn thường tắt, nhưng điều này có thể được thay đổi với tùy chọn SQLITE_SECURE_DELETE
.
21. Pragma sql_trace trong SQLite
Pragma sql_trace
được sử dụng để theo dỏi kết quả SQL trên màn hình. Cú pháp như sau:
PRAGMA sql_trace; PRAGMA sql_trace = [true|false];
SQLite
phải được biên dịch với chỉ thị SQLITE_DEBUG
để đưa vào pragma này.
22. Pragma synchronous trong SQLite
Pragma synchronous
được sử dụng để get hoặc set chế độ đồng bộ hóa disk hiện tại, điều khiển SQLite sẽ ghi dữ liệu mạnh mẽ như thế nào vào bộ nhớ vật lý. Cú pháp như sau:
PRAGMA [database.]synchronous; PRAGMA [database.]synchronous = mode;
SQLite
hỗ trợ các chế độ synchronization
được liệt kê trong bảng sau:
Giá trị | Mô tả |
0 or OFF | Không có đồng bộ hóa nào cả |
1 or NORMAL | Đồng bộ hóa sau mỗi chuỗi hoạt động Critical trên disk |
2 or FULL | Đồng bộ hóa sau mỗi hoạt động Critical trên disk |
23. Pragma temp_store trong SQLite
Pragma temp_store
được sử dụng để get hoặc set chế độ lưu trữ được sử dụng bởi các file cơ sở dữ liệu tạm thời. Cú pháp như sau:
PRAGMA temp_store; PRAGMA temp_store = mode;
SQLite
hỗ trợ các chế độ lưu trữ sau.
Giá trị | Mô tả |
0 or DEFAULT | Sử dụng mặc định thời gian biên dịch. Thông thường FILE. |
1 or FILE | Sử dụng lưu trữ dựa trên tập tin. |
2 or MEMORY | Sử dụng bộ nhớ dựa trên bộ nhớ. |
24. Pragma temp_store_directory trong SQLite
Pragma temp_store_directory
được sử dụng để get hoặc set vị trí được sử dụng cho các file cơ sở dữ liệu tạm thời. Cú pháp như sau:
PRAGMA temp_store_directory; PRAGMA temp_store_directory = 'directory_path';
25. Pragma user_version trong SQLite
Pragma user_version
được sử dụng để get hoặc set giá trị phiên bản do người dùng xác định được lưu trữ trong tiêu đề cơ sở dữ liệu. Cú pháp như sau:
PRAGMA [database.]user_version; PRAGMA [database.]user_version = number;
Đây là giá trị số nguyên có chữ ký 32 bit, có thể được nhà phát triển đặt cho mục đích theo dõi phiên bản.
26. Pragma writable_schema trong SQLite
Pragma writable_schema
được sử dụng để get hoặc set khả năng sửa đổi các bảng hệ thống. Cú pháp như sau:
PRAGMA writable_schema; PRAGMA writable_schema = [true|false];
Nếu pragma này được đặt, các bảng bắt đầu bằng sqlite_ có thể được tạo và sửa đổi, bao gồm bảng sqlite_master
. Hãy cẩn thận trong khi sử dụng pragma vì nó có thể dẫn đến lead hoàn toàn cơ sở dữ liệu.