我有一个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如此不一致?
答案 0 :(得分:1)
愚蠢的我,找到了它。 字段定义应为:
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
而不是
id NUMERIC PRIMARY KEY DESC,
如果没有自动增量,它会为主键创建索引而不是自动增量。
我必须说出奇怪的行为。
答案 1 :(得分:0)
要使其中一个列自动增量,您必须将其声明为INTEGER PRIMARY KEY(而不是NUMERIC)。
如果您没有此类列,则lastInsertRowid
返回的值适用于隐藏的rowid
列。
sqlite_autoindex_
对象不是表,而是为主键创建的内部索引。