复合主键上的自增 - Sqlite3 + Python
我有一段这样的代码
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
不需要唯一),那么你可能需要使用触发器来让自动递增功能正常工作。