给出一个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名称?
P.S。我可以看到JetBrains的DataGrip在数据库浏览器中正确显示PK名称。但是sqliteadmin例如用sqlite_autoindex_t1_1这样的名字显示它们。对于唯一约束,即使DataGrip也没有显示正确的名称(实际上它根本不显示它们)。
答案 0 :(得分:0)
索引和约束是不同的对象。
SQLite没有机制来检索约束名称。你必须解析SQL。