【问题标题】:SQLite: How to extract primary keys and unique constraints with correct namesSQLite:如何提取具有正确名称的主键和唯一约束
【发布时间】: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


    【解决方案1】:

    索引和约束是不同的对象。

    SQLite 没有检索约束名称的机制。您必须解析 SQL。

    【讨论】:

      猜你喜欢
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2014-09-12
      • 2014-12-16
      • 2013-12-22
      • 1970-01-01
      相关资源
      最近更新 更多