Sqlite:如果不存在则插入,如果存在则更新

Sqlite:如果不存在则插入,如果存在则更新,sql,sqlite,Sql,Sqlite,我有一个包含两个表的数据库,如下所示: cg_resp id | name | email 1 | George | george@yahoo.com id列是主键,自动递增,名称是唯一的 及 在申请表中,我有两个编辑框,分别名为edit_resp_name和edit_resp_email 如果用户在电子邮件john@yahoo.com然后在保存表单的过程中,我想在cg\u resp表中插入一个新的负责人,获取最后插入的id并将其更新为equipment\u info.cg\u re

我有一个包含两个表的数据库,如下所示:

cg_resp
id  | name   | email
1   | George | george@yahoo.com
id
列是
主键
自动递增
名称
唯一的

在申请表中,我有两个编辑框,分别名为
edit_resp_name
edit_resp_email

如果用户在电子邮件
john@yahoo.com
然后在保存表单的过程中,我想
cg\u resp
表中插入一个新的负责人,获取最后插入的
id
并将其更新为
equipment\u info.cg\u resp\u id

如果用户维护名称
George
,但它像
george01@gmail.com
然后我想用新的电子邮件地址更新
cg_resp
中的
id
=1,其余的(
equipment_info.cg_resp_id
cg_resp.id
)保持不变

如果负责人的姓名相同,我希望保留表
equipment\u info
cg\u resp\u id
的原始参考,因此有必要避免删除和插入新的参考


如何在一个sql序列中实现这一点

使用您想要的功能:在名称不存在时插入新行,或以其他方式更新。

SQLite没有不会删除现有行的内置机制

最简单的方法是将逻辑放入应用程序中:

cursor=db.execute(“选择…”)
如果游标为空:
db.execute(“插入…”)
其他:
执行(“更新…”)
如果您的语言允许读取受影响的行数,则可以使用两个SQL命令执行此操作:

db.execute(“更新…”)
如果db.rowcount==0:
db.execute(“插入…”)

是否必须在一条sql语句中执行此操作?您可以尝试从数据库中选择名称。如果结果集为空,则使用
insert
语句,如果该集包含您调用的
update
语句的名称。这不是绝对必要的。。。如果可能,否则我会做经典的。更新cg_resp,其中id=1u可以使用插入或替换到
…这是否回答了您的问题?“替换”会删除旧的行(如果存在)。请小心,“插入”或“替换”会删除该行,并使用新键插入新的行,因此,如果您有自动生成的键并利用它们,那么您将运气不佳。我还没有找到一种优雅的方式来满足你的要求,但我会继续寻找。
equip_info
id  | description  | cg_resp_id 
1   | Caliper      | 1