2016-04-27 86 views
0

給定一個SQLite數據庫。SQLite:如何使用正確名稱提取主鍵和唯一約束

與主鍵的表:

create table t1 (id int not null, CONSTRAINT pk_id PRIMARY KEY (id)); 

現在查詢信息吧:

PRAGMA TABLE_INFO(t1); 

回報:
| cid | name | type | notnull | dflt_value | pk | | --- | ---- | ---- | ------- | -----------| -- | | 0 | id | int | 1 | <null> | 1 |

PRAGMA index_list(t1); 

回報:

| seq | name | unique | origin | partial | | --- | ----------------------| ------ | ------ | ------- | | 0 | sqlite_autoindex_t1_1 | 1 | pk | 0 |

我們可以看到關於PK index_list回報的信息,但其報告不正確的名稱(「sqlite_autoindex_t1_1」而不是「pk_t1」)。

與UNIQUE約束相同的問題。它們是使用自動生成的名稱創建的。

是否可以提取真正的PRIMARY KEY/UNIQUE CONSTRAINT名稱?

P.S.我可以看到JetBrains的DataGrip在數據庫瀏覽器中正確顯示PK名稱。但sqliteadmin例如顯示它們的名字,如sqlite_autoindex_t1_1。對於唯一的約束,即使DataGrip不顯示正確的名稱(實際上它根本不顯示它們)。

回答

0

索引和約束是不同的對象。

SQLite沒有檢索約束名稱的機制。你必須解析SQL。