Sqlite数据库不返回PRIMARY字段值

时间:2013-10-06 16:40:36

标签: php database sqlite

我有一个sqlite数据库。我正在使用SQLite3扩展来在PHP中连接它。

数据库来自我迄今为止用于发票的程序。我从该程序中取出了sqlite文件并编写了自己的基于Web的界面。

除非我在现有数据库中创建新表,否则一切似乎都没问题。

数据库已创建,我可以添加新条目,lastInsertRowid()返回正确的最后插入ID。

但是,当我开始从新表中选择条目时,所有ID(主键)都是空的。

我用SQLite数据库浏览器打开了我的数据库,有点奇怪。

也许首先我会给出我的数据库架构:

CREATE TABLE IF NOT EXISTS koszty
(
    id NUMERIC PRIMARY KEY DESC,
    data NUMERIC,
    nazwa TEXT,
    wartosc_netto NUMERIC UNSIGNED,
    podatek NUMERIC UNSIGNED,
    typ NUMERIC UNSIGNED,
    filename TEXT,
    opis TEXT
)

当我打开DB时,有一个奇怪的表sqlite_autoindex_koszty_1,似乎只对应于表。旧表没有它。

另一方面,还有sqlite_sequence表似乎存储自动增量ID。

所有表格都在这里,AI值除了koszty。

可能是什么原因?如何修复DB。是不是我做错了(也许Sqlite版本不一样?在Sqlite2 DB上使用SQLite3?)或SQLite如此不一致?

2 个答案:

答案 0 :(得分:1)

愚蠢的我,找到了它。 字段定义应为:

id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

而不是

id NUMERIC PRIMARY KEY DESC,

如果没有自动增量,它会为主键创建索引而不是自动增量。

我必须说出奇怪的行为。

答案 1 :(得分:0)

要使其中一个列自动增量,您必须将其声明为INTEGER PRIMARY KEY(而不是NUMERIC)。 如果您没有此类列,则lastInsertRowid返回的值适用于隐藏的rowid列。

sqlite_autoindex_对象不是表,而是为主键创建的内部索引。