Lệnh PRAGMA trong SQLite

Lệnh PRAGMA trong SQLite là một lệnh đặc biệt để điều khiển các biến môi trường và các flag trạng thái đa dạng bên trong môi trường SQLite. Một giá trị PRAGMA có thể được đọc và nó cũng có thể được thiết lập tùy theo yêu cầu.

Cú pháp Lệnh PRAGMA trong SQLite

Để truy vấn giá trị PRAGMA hiện tại, bạn chỉ cần cung cấp tên của Pragma đó:

PRAGMA pragma_name;

Để thiết lập một giá trị mới cho PRAGMA, bạn sẽ sử dụng cú pháp sau:

PRAGMA pragma_name = value;

Chế độ thiết lập có thể là tên hoặc giá trị số nguyên tương đương, nhưng giá trị trả về sẽ luôn luôn là một số nguyên.

auto_vacuum Pragma trong SQLite

auto_vacuum pragma lấy hoặc thiết lập chế độ auto_vacuum. Sau đây là cú pháp:

PRAGMA [database.]auto_vacuum;
PRAGMA [database.]auto_vacuum = mode;

Where mode can be any of the following:

Giá trị PragmaMiêu tả
0 or NONEVô hiệu hóa auto-vacuum. Đây là mode mặc định, nghĩa là một Database file sẽ không bao giờ rút gọn kích cỡ trừ khi nó được thao tác bởi sử dụng lệnh VACUUM
1 or FULLKích hoạt auto-vacuum và tự động cho phép một Database file để rút gọn khi dữ liệu bị xóa từ cơ sở dữ liệu đó
2 or INCREMENTALKích hoạt auto-vacuum, nhưng phải theo sự thao tác. Trong mode này, dữ liệu tham chiếu được duy trì, nhưng các free page được đặt trên các free list. Các page này có thể được phục hồi bởi sử dụng incremental_vacuum pragma ở bất cứ thời điểm nào

cache_size Pragma trong SQLite

cache_size pragma có thể lấy hoặc tạm thời thiết lập kích cỡ tối đa của page cache trong bộ nhớ. Cú pháp như sau:

PRAGMA [database.]cache_size;
PRAGMA [database.]cache_size = pages;

Giá trị pages biểu diễn số page trong cache. Page cache có sẵn có kích cỡ mặc định là 2000 page và kích cỡ tối thiểu là 10 page.

case_sensitive_like Pragma trong SQLite

case_sensitive_like pragma điều khiển chế độ phân biệt kiểu chữ của biểu thức LIKE có sẵn. Theo mặc định, Pragma này là false, nghĩa là toán tử LIKE có sẵn này bỏ qua kiểu chữ. Cú pháp là như sau:

PRAGMA case_sensitive_like = [true|false];

Không có cách nào để truy vấn cho trạng thái hiện tại của Pragma này.

count_changes Pragma trong SQLite

count_changes lấy hoặc thiết lập giá trị trả về của các lệnh thao tác dữ liệu, như INSERT, UPDATE, và DELETE. Sau đây là cú pháp:

PRAGMA count_changes;
PRAGMA count_changes = [true|false];

Theo mặc định, Pragma này là false và các lệnh này không trả về bất cứ cái gì. Nếu thiết lập là true, mỗi lệnh ở trên sẽ trả về một bảng có một cột và một hàng gồm các giá trị số nguyên đơn để chỉ các hàng bị nén bởi hoạt động này.

database_list Pragma trong SQLite

database_list pragma sẽ được sử dụng để liệt kê tất cả Attached Database. Sau đây là cú pháp đơn giản:

PRAGMA database_list;

Pragma này sẽ trả về một bảng có ba cột với một hàng cho mỗi Attached Database, cung cấp số dãy cơ sở dữ liệu, tên của nó và file được liên kết.

encoding Pragma trong SQLite

encoding pragma điều khiển cách các chuỗi được mã hóa và được lưu trữ trong một Database file. Sau đây là cú pháp:

PRAGMA encoding;
PRAGMA encoding = format;

Giá trị format có thể là UTF-8, UTF-16le, hoặc UTF-16be.

freelist_count Pragma trong SQLite

freelist_count pragma trả về một số nguyên đơn chỉ ra xem hiện tại có bao nhiêu Database page được đánh dấu là free và có sẵn. Sau đây là cú pháp đơn giản.

PRAGMA [database.]freelist_count;

index_info Pragma trong SQLite

index_info pragma trả về thông tin về một chỉ mục cơ sở dữ liệu. Sau đây là cú pháp:

PRAGMA [database.]index_info( index_name );

Tập kết quả sẽ chứa một hàng cho mỗi cột được chứa trong chỉ mục mà cung cấp dãy cột, chỉ mục cột bên trong bảng và tên cột.

index_list Pragma trong SQLite

index_list pragma liệt kê tất cả chỉ mục được liên kết với một bảng. Sau đây là cú pháp:

PRAGMA [database.]index_list( table_name );

Tập kết quả sẽ chứa một hàng cho mỗi chỉ mục mà cung cấp dãy chỉ mục, tên chỉ mục và flag chỉ ra rằng chỉ mục là duy nhất hay không.

journal_mode Pragma trong SQLite

journal_mode pragma lấy hoặc thiết lập journal mode mà điều khiển cách journal file được lưu trữ và được xử lý. Sau đây là cú pháp cơ bản:

PRAGMA journal_mode;
PRAGMA journal_mode = mode;
PRAGMA database.journal_mode;
PRAGMA database.journal_mode = mode;

SQLite hỗ trợ 5 journal mode:

Giá trị PragmaMiêu tả
DELETEĐây là mode mặc định. Ở đây, tại phần cuối của một Transaction, journal file bị xóa
TRUNCATEJournal file bị cắt về 0 byte (về độ dài)
PERSISTJournal file bị thay thế, nhưng header bị ghi đè để chỉ rằng file này không còn hợp lệ nữa
MEMORYJournal record được giữ trong bộ nhớ, thay cho trên Disk
OFFKhông có Journal record bị giữ

max_page_count Pragma trong SQLite

max_page_count pragma lấy hoặc thiết lập số page tối đa cho một Database. Sau đây là cú pháp đơn giản:

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, nghĩa là nếu kích cỡ page mặc định là 1kB, thì nó cho phép các cơ sở dữ liệu lên tới một Terabyte.

page_count Pragma trong SQLite

page_count pragma trả về số page hiện tại trong Database. Sau đây là cú pháp đơn giản:

PRAGMA [database.]page_count;

Kích cỡ của một Database file nên là page_count * page_size.

page_size Pragma trong SQLite

page_size pragma lấy hoặc thiết lập kích cỡ của page trong Database. Sau đây là cú pháp đơn giản:

PRAGMA [database.]page_size;
PRAGMA [database.]page_size = bytes;

Theo mặc định, kích cỡ cho phép là 512, 1024, 2048, 4096, 8192, 16384, và 32768 byte. Cách duy nhất để thay đổi kích cỡ page trên một Database đang tồn tại là thiết lập kích cỡ page và sau đó là VACUUM cơ sở dữ liệu đó.

parser_trace Pragma trong SQLite

parser_trace pragma điều khiển việc in trạng thái debug khi nó phân tích cú pháp các lệnh SQL. Sau đây là cú pháp:

PRAGMA parser_trace = [true|false];

Theo mặc định, nó được thiết lập là false, nhưng khi được kích hoạt bằng việc thiết lập là true, SQL Parser sẽ in trạng thái của nó khi nó phân tích cú pháp các lệnh SQL.

recursive_triggers Pragma trong SQLite

recursive_triggers lấy hoặc thiết lập tính năng trigger đệ qui. Nếu các Recursive trigger không được kích hoạt, một hành động trigger sẽ không kích hoạt trigger khác. Sau đây là cú pháp đơn giản:

PRAGMA recursive_triggers;
PRAGMA recursive_triggers = [true|false];

schema_version Pragma trong SQLite

schema_version pragma lấy hoặc thiết lập giá trị phiên bản shema mà được lưu trữ trong Database Header. Sau đây là cú pháp cơ bản:

PRAGMA [database.]schema_version;
PRAGMA [database.]schema_version = number;

Đây là một giá trị nguyên có dấu mà theo dõi các thay đổi của Schema. Bất cứ khi nào một lệnh thay đổi đến schema được thực thi (LIKE, CREATE, DROP, …), giá trị này được tăng lên.

secure_delete Pragma trong SQLite

secure_delete pragma được sử dụng để điều khiển cách nội dung bị xóa từ Database. Sau đây là cú pháp:

PRAGMA secure_delete;
PRAGMA secure_delete = [true|false];
PRAGMA database.secure_delete;
PRAGMA database.secure_delete = [true|false];

Giá trị mặc định cho secure-delete flag thường là off, nhưng nó có thể được thay đổi với tùy chọn SQLITE_SECURE_DELETE.

sql_trace Pragma trong SQLite

sql_trace pragma được sử dụng để hiển thị lệnh SQL trace trên màn hình. Sau đây là cú pháp:

PRAGMA sql_trace;
PRAGMA sql_trace = [true|false];

SQLite phải được biên dịch với directive là SQLITE_DEBUG cho Pragma này để được bao.

synchronous Pragma trong SQLite

synchronous pragma lấy hoặc thiết lập chế độ đồng bộ hóa disk hiện tại mà điều khiển cách SQLite sẽ ghi dữ liệu ra kho lưu vật lý. Sau đây là cú pháp:

PRAGMA [database.]synchronous;
PRAGMA [database.]synchronous = mode;

SQLite hỗ trợ các chế độ đồng bộ hóa sau:

Giá trị PragmaMiêu tả
0 or OFFKhông đồng bộ hóa
1 or NORMALĐồng bộ hóa sau mỗi dãy hoạt động Critical trên disk
2 or FULLĐồng bộ hóa sau mỗi hoạt động Critical trên disk

temp_store Pragma trong SQLite

temp_store pragma lấy hoặc thiết lập chế độ lưu giữ được sử dụng bởi các Database file tạm thời. Sau đây là cú pháp:

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite hỗ trợ các chế độ lưu trữ sau:

Giá trị PragmaMiêu tả
0 or DEFAULTSử dụng compile-time mặc định. Thường là FILE
1 or FILESử dụng lưu trữ dựa trên file
2 or MEMORYSử dụng lưu trữ dựa trên bộ nhớ

temp_store_directory Pragma trong SQLite


temp_store_directory pragma lấy hoặc thiết lập vị trí được sử dụng cho Database file tạm thời. Sau đây là cú pháp:

PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';

user_version Pragma trong SQLite

user_version pragma lấy hoặc thiết lập giá trị phiên bản do người dùng tự định nghĩa mà được lưu trữ trong Database Header. Sau đây là cú pháp:

PRAGMA [database.]user_version;
PRAGMA [database.]user_version = number;

Đây là một giá trị nguyên có dấu 32 bit mà có thể được thiết lập bởi lập trình viên với mục đích theo dõi phiên bản.

writable_schema Pragma trong SQLite

writable_schema pragma lấy hoặc thiết lập khả năng để sửa đổi các bảng hệ thống. Sau đây là cú pháp:

PRAGMA writable_schema;
PRAGMA writable_schema = [true|false];

Nếu Pragma này được thiết lập, các bảng mà bắt đầu với sqlite_ có thể được tạo và sửa đổi, bao gồm các bảng sqlite_master. Bạn cẩn thận trong khi sử dụng Pragma này bởi vì nó có thể gây ra sự xung đột hoàn toàn của cơ sở dữ liệu.

Bình luận