我想插入一行,如果它不存在。如果它已经存在,我想获得它的主键。 这可以在不使用两个查询的情况下完成,例如在列上使用UNIQUE约束,并在ON CONFLICT ...告诉冲突的ROWID?SQLite插入或选择主键
2
A
回答
1
请注意,我没有SQLite的经验。但是,在仔细阅读在线文档之后,我不相信它支持数据更改表引用,所以不,这是不可能的。
我的推荐是写INSERT
这样的方式,它不会失败如果行存在 - 它只是不会插入一行。类似这样的:
INSERT INTO destinationTable (colA, colB)
(SELECT :colAValue, :colBValue
WHERE NOT EXISTS (SELECT '1'
FROM destinationTable
WHERE uniqueColumn = :uniqueColumn))
这是有效的,因为如果选择已经存在,选择将不会返回一行。然后,您可以查看返回代码/状态以查看是否使用INSERT
编辑了一行,或者只使用SELECT
与唯一列,以获取标识列。
不要依靠你的约束来抓住这个。约束条件是捕获应用程序错误,这仅仅是一个业务/实现细节。
1
总之,没有。你不能用SQLite插入数据,或者在某些情况下选择它。
其他SQL引擎可能会允许它,但SQLite不能。
你可以做的是INSERT OR IGNORE
,它不会带来错误。见http://sqlite.org/lang_conflict.html
相关问题
- 1. 带主键的sqlite插入
- 2. Android,SQLite ....主键被插入为空
- 3. 主键在android sqlite中插入为空
- 4. 选择主键
- 5. 选择主键
- 6. Python/sqlite - 插入后选择记录
- 7. SQLITE - 插入选择不工作?
- 8. 选择然后在sqlite表中插入
- 9. SQLite多次插入选择结果
- 10. 插入主键时插入外键?
- 11. 根据主键插入或更新
- 12. SQL服务器:插入选择其中排序顺序等于插入主键
- 13. DataGridView插入主键
- 14. 插入自主键
- 15. SQLite插入或替换成
- 16. 插入或更新SQLite中
- 17. SQLite优化多选插入
- 18. Android SQLite通过非主键列进行选择
- 19. SQL选择或插入返回ID
- 20. 插入或选择和覆盖零点
- 21. Python - 没有自动增量主键值的Sqlite插入元组
- 22. 获取主键从SQL插入背面使用SQLite
- 23. 主键选择的性能
- 24. 如何插入后,主键
- 25. 插入PDO与主键
- 26. 从插入获取主键
- 27. 插入行jdbc的主键?
- 28. 警报主键插入
- 29. 更快的“插入忽略”或“选择并插入”
- 30. 在主类中插入主键