我想插入一行,但只有在它不存在的情况下,否则我需要增加一列,重写另一列,等等。我该怎么做?我需要选择吗?我希望有一个INSERT或UPDATE语句让我知道它是否失败所以我可以做另一个。
我正在使用sqlite ATM而我可能切换到MySQL。使用C#.NET。
答案 0 :(得分:1)
我不知道任何纯SQL语句会完全符合您的要求。大多数运行SQL的环境(例如DBI等)都有一些方法可以告诉您受影响的行数。因此,您可以执行更新,如果没有命中任何行,则执行插入。
如果这不是一个选项,请先进行更新,然后再进行插入。如果该行存在,则更新将起作用,并且插入将在密钥违例时失败。如果该行不存在,则更新将不会显示任何行,插入应该成功。
答案 1 :(得分:0)
您也可以像以下一样同时执行这两项操作:
INSERT IGNORE ...
然后,
UPDATE ...
这将在没有AUTO_INCREMENTING字段的情况下工作。
答案 2 :(得分:0)
sqlite3_changes将告诉您最后一个语句影响了多少行。首先尝试UPDATE,如果它改变0行,则执行INSERT。