转于:http://blog.chinaunix.net/uid-40286-id-3816127.html
--------------------------------------------------------------------------------------------------
PRAGMA语句是SQLITE数据的SQL扩展,是它独有的特性,主要用于修改SQLITE库或者内数据查询的操作。它采用与SELECT、INSERT等语句一样的形式来发出请求,但也有几个重要的不同:
1. 特定的PRAGMA语句可能被移走,新的PRAGMA语句可能在新的版本中添加。因此,后向兼容无法保证。
2. 未知的PRAGMA命令不会有错误消息出现,它只是简单的忽略。
3. 有些PRAGMA只在SQL的编译阶段起作用,而不是执行阶段。 这意味着如果使用C语言,sqlite3_prepare(), sqlite3_step(), sqlite3_finalize()这几个API,pragma命令可能只在prepare()的调用里运行,而不是在后两个API当中执行。或者,pragma可能在sqlite3_step()执行的时候运行。到底在哪个阶段执行,取决于pragma从本身,以及是哪个sqlite的release版本。
4. pragma命令是sqlite特有的,基本上不可能与其它数据库保持兼容。
PRAGMA命令的语法格式如下图:
它可以不带参数,或者只带一个参数。这个参数可以是等号赋值,也可以用括号括起来。两者效果一样。很多情况下,参数值是布尔型,值为(1,yes,true 或on)或者(0, no, false, off)
关键字参数,可以使用引号括起来,e.g. 'yes' [FALSE]。有些pragma命令会使用字符串作为参数,"0"和"no"表示相同的含义。当查询某设置的值时,很多情况下返回的是数值,而不是关键字。
pragma名之前,可以选带数据库的名字。数据库名是被"attach"(关联)上的数据库名字,或者是"main", "temp"来表示主数据库和临时数据库。如果可选的数据库名被略去,则默认为"main"数据库。在有些pragma命令里,数据库名没有意义,则简单的忽略掉。
下面我们看看sqlite到底有些有用的pragma命令:
auto_vacuum
automatic_index
cache_size
case_sensitive_like
checkpoint_fullfsync
collation_list
compile_options
count_changes¹
database_list
default_cache_size¹
empty_result_callbacks¹
encoding
foreign_key_list
foreign_keys
freelist_count
full_column_names¹
fullfsync
ignore_check_constraints
incremental_vacuum
index_info
index_list
integrity_check
journal_mode
journal_size_limit
legacy_file_format
locking_mode
max_page_count
page_count
page_size
parser_trace²
quick_check
read_uncommitted
recursive_triggers
reverse_unordered_selects
schema_version
secure_delete
short_column_names¹
synchronous
table_info
temp_store
temp_store_directory¹