自动增量在复合主键上 - Sqlite3 + Python

4
我有一个类似这样的代码。
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定义为唯一的主键,然后在id,col3上添加额外的唯一约束来获得类似的结果。

如果这仍不完全符合您的要求(比如,id根本不需要唯一),那么您可能需要使用触发器来实现自动递增。


太好了!感谢您解释这个问题。我想我会选择将ID作为主键整数,并在Col2上添加唯一约束。谢谢! - Bhavani Kannan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接