0

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

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

一切似乎都很好,除非我为现有数据库创建了新表。

数据库已创建,我可以添加新条目,并且 lastInsertRowid() 会返回正确的 Last Insert 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
)

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

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

除 koszty 外,所有表都有其名称和 AI 值。

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

4

2 回答 2

1

傻逼,找到了。字段定义应为:

id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

代替

id NUMERIC PRIMARY KEY DESC,

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

我必须说奇怪的行为。

于 2013-10-06T17:42:27.750 回答
0

要使您的列之一自动递增,您必须将其声明为INTEGER PRIMARY KEY(而不是 NUMERIC)。如果您没有这样的列,则返回的值lastInsertRowid是隐藏rowid列。

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

于 2013-10-06T17:41:00.800 回答