为什么PRAGMA schema.index_list(table-name);不显示主键?

时间:2019-03-07 04:59:32

标签: sqlite

根据文档,PRAGMA schema.index_list(table-name);应该列出所有索引,包括主键。

但是,当我使用它时,我只会得到二级索引。

https://www.sqlite.org/pragma.html#pragma_index_info

什么会导致主键未列出?

CREATE TABLE Employee
(
    EmployeeKey INTEGER PRIMARY KEY,
    FirstName nvarChar(25) NOT NULL,
    MiddleName nvarChar(25) NULL,
    LastName nVarChar(25) NOT NULL,
    Title nVarChar(100) null,
    EmployeeId nvarChar(50) NOT NULL,
    ManagerKey INT NULL REferences Employee(EmployeeKey),
    OfficePhone VARCHAR(15) NULL ,
    CellPhone VARCHAR(15) NULL ,
    CreatedDate DateTime NOT NULL DEFAULT CURRENT_TIME,
    UpdatedDate DateTime NULL
)

CREATE UNIQUE INDEX index_name ON Employee(EmployeeId);

1 个答案:

答案 0 :(得分:1)

EmployeeKey 将不会显示为索引,因为它是 rowid 列的别名。

  • rowid 列是所有未定义为 WITHOUT ROWID 表的表所固有的。
  • 列可被视为MASTER索引。

如果您不将INTEGER PRIMARY KEY指定为PRIMARY KEY,例如您指定了EmployeeKey TEXT PRIMARY KEY,则索引将被列出,因为SQLite非常详细地说明了 rowid 的别名(例如EmployeeKey INT PRIMARY KEY不是rowid的别名) ,因此会有一个索引)

您不妨看一下CREATE TABLE - Rowid