SQLite插入或选择主键

SQLite插入或选择主键,sql,sqlite,Sql,Sqlite,如果行不存在,我想插入一行。如果它已经存在,我想获取它的主键。 这可以在不使用两个查询的情况下完成吗,例如对列和冲突使用唯一约束。。。告诉我冲突的ROWID?请注意,我没有使用SQLite的经验。然而,在阅读了在线文档之后,我认为它不支持数据更改表引用,所以不,这是不可能的 我的建议是编写INSERT,这样,如果行存在,它就不会失败,只是不会插入行。大概是这样的: INSERT INTO destinationTable (colA, colB) (SELECT :co

如果行不存在,我想插入一行。如果它已经存在,我想获取它的主键。
这可以在不使用两个查询的情况下完成吗,例如对列和冲突使用唯一约束。。。告诉我冲突的ROWID?

请注意,我没有使用SQLite的经验。然而,在阅读了在线文档之后,我认为它不支持数据更改表引用,所以不,这是不可能的

我的建议是编写
INSERT
,这样,如果行存在,它就不会失败,只是不会插入行。大概是这样的:

INSERT INTO destinationTable (colA, colB) 
            (SELECT :colAValue, :colBValue
             WHERE NOT EXISTS (SELECT '1'
                               FROM destinationTable
                               WHERE uniqueColumn = :uniqueColumn))
这是因为如果行已经存在,则选择不会返回该行。然后,您可以查看返回代码/状态,查看它是否插入了一行,或者只选择带有唯一列的
来获取标识列


不要依靠你的约束来抓住这个机会。约束用于捕获应用程序错误,这仅仅是一个业务/实现细节。

总之,不可以。使用SQLite,您既不能插入数据,也不能在某些情况下选择数据

其他SQL引擎可能允许,但SQLite不能

您可以做的是插入或忽略
,这样就不会出现错误。看