复合主键上的自增 - Sqlite3 + Python

4 投票
1 回答
5706 浏览
提问于 2025-04-16 22:05

我有一段这样的代码

c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER NOT NULL, col2 TEXT NOT NULL, col3 INTEGER, PRIMARY KEY(ID, col2))')

这段代码让我遇到了一个sqlite3.IntegrityError的错误,尽管我很确定这是我第一次写入这条记录。

所以,我尝试了

c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER, col2 TEXT, col3 INTEGER, PRIMARY KEY(ID, col2))')

这段代码可以在base表中正常插入这一行,但ID列根本没有自动增加。

我该怎么办呢?有什么建议吗?

1 个回答

14

在sqlite中,只有当一个整数列作为主键时,才会有自动递增的效果。如果你使用了复合主键(也就是多个列一起作为主键),那么自动递增就不会生效了。

你可以通过把id定义为唯一的主键来实现类似的效果,但同时需要在idcol3上添加一个额外的唯一约束。

如果这样还是不能满足你的需求(比如说,id不需要唯一),那么你可能需要使用触发器来让自动递增功能正常工作。

撰写回答