2016-09-15 75 views
1
sqlite> create table foo(x TEXT PRIMARY KEY, y TEXT UNIQUE); 
sqlite> select * from sqlite_master; 
table|foo|foo|2|CREATE TABLE foo(x TEXT PRIMARY KEY, y TEXT UNIQUE) 
index|sqlite_autoindex_foo_1|foo|3| 
index|sqlite_autoindex_foo_2|foo|4| 

对于用户定义的索引,最后一列sqlite_master告诉我它们在哪些列上。但是,正如您所看到的,对于由(非rowid)PRIMARY KEYUNIQUE隐式创建的索引,此信息不存在。有没有一种可靠的方法可以告诉我哪个autoindex是哪个?有没有办法告诉SQLite内部索引在哪些列上?

回答

1

内部和显式创建的索引之间没有区别;你可以得到关于他们的信息以相同的编译指示(index_listindex_infoindex_xinfo):

 
sqlite> pragma index_list(foo); 
seq   name     unique  origin  partial 
---------- ---------------------- ---------- ---------- ---------- 
0   sqlite_autoindex_foo_2 1   u   0 
1   sqlite_autoindex_foo_1 1   pk   0 
sqlite> pragma index_xinfo(sqlite_autoindex_foo_1); 
seqno  cid   name  desc  coll  key 
---------- ---------- ---------- ---------- ---------- ---------- 
0   0   x   0   BINARY  1 
1   -1      0   BINARY  0 
sqlite> pragma index_xinfo(sqlite_autoindex_foo_2); 
seqno  cid   name  desc  coll  key 
---------- ---------- ---------- ---------- ---------- ---------- 
0   1   y   0   BINARY  1 
1   -1      0   BINARY  0 
相关问题