我有这样的代码
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))')
这会将行细插入 基 表BUT中,ID列根本不会自动递增。
我能做什么?任何想法?
在sqlite中,仅当一个整数列是主键时,您才获得自动增量行为。复合键阻止自动增量生效。
通过定义id
为唯一的主键,然后在上添加一个附加的唯一约束,您可以获得类似的结果id, col3
。
如果那仍然不是您想要的(例如,id根本不需要唯一),则可能必须使用触发器来使自动增量工作。
如何在多会话/事务环境中安全地将一行插入到包含带有(手动)增量键的主复合键的表中。 如何获取<code>column_c</code>的最新增量值,<code>LAST_INSERT_ID()</code>不返回所需值。 我已经研究了< code >选择更新...INSERT和< code>INSERT INTO SELECT,但无法决定使用哪一个。 从事务安全(锁)、隔离级别和性能角度来看,实现
问题内容: SQL Server中自动增量主键的上限是多少?SQL Server自动增量主键达到上限时会发生什么? 问题答案: Joel的答案是正确的,它是您使用的任何数据类型的上限。 这是其中两个的示例: 整数:2 ^ 31-1(2,147,483,647) bigint:2 ^ 63-1(9,223,372,036,854,775,807) 实际上,我所从事的工作已经达到极限。实际错误是: 我
问题内容: 是否可以自动增加非主密钥? 表“ book_comments” 该表上将没有其他索引。但是,我想使列自动递增,以便可以轻松创建另一个表: 表格“ book_comments_votes” 用户将只能对每个书评进行一次投票。该表通过主键强制执行此规则。 题: 是否可以自动增加非主键-例如,自动增加表“ book_comments”中的列? 替代方案,讨论: 如上所述,我想这样做是为了简化
问题内容: 是否可以在MySQL中制作结合了alpha元素和数字的自动增量功能? 我有一个具有QAb99,QAb101,QAd9003等键的现有系统。最大数字部分的范围为1到9999,而字母以QA开头,范围从QAa到QAd等,最终将通过QAd9999到QAe1等。 。 在SQL或SQL外部(例如php脚本)管理生成新密钥是否更好? 谢谢。 问题答案: 我前一阵子问过。不幸的是,Mysql并没有这样
问题内容: 我想为InnoDB MySQL表创建类似于MyISAM的行为。我想要一个复合主键: 主键(id1,id2) 其中id1根据id2的值自动递增。用InnoDB做到这一点的最佳方法是什么? 问题答案: 您可以使用此BEFORE INSERT触发器来替换零个id值- 然后插入零值(id1或id2)以生成新值-
问题内容: 我想在ala SQL Server列中实现标识或自动递增值: 如何才能做到这一点? 问题答案: 正如Orbman所说,实现此目标的标准方法是使用序列。大多数人也将其与插入触发器结合在一起。因此,当插入没有ID的行时,触发器将触发以从序列中为您填写ID。 这是在Oracle中使用触发器的少数情况之一。