【发布时间】:2016-04-27 18:07:11
【问题描述】:
给定一个 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 |
我们可以看到index_list 返回有关 PK 的信息,但它报告的名称不正确(“sqlite_autoindex_t1_1”而不是“pk_t1”)。
UNIQUE 约束也有同样的问题。它们是使用自动生成的名称创建的。
是否可以提取真正的 PRIMARY KEY/UNIQUE CONSTRAINT 名称?
附:我可以看到 JetBrains 的 DataGrip 在数据库浏览器中正确显示 PK 名称。但例如 sqliteadmin 以 sqlite_autoindex_t1_1 之类的名称显示它们。对于唯一约束,即使 DataGrip 也不会显示正确的名称(实际上它根本不会显示它们)。
【问题讨论】:
标签: sqlite