Sql insert如果不存在,否则(完全不同)更新

时间:2009-10-03 02:53:03

标签: mysql sql sqlite insert

我想插入一行,但只有在它不存在的情况下,否则我需要增加一列,重写另一列,等等。我该怎么做?我需要选择吗?我希望有一个INSERT或UPDATE语句让我知道它是否失败所以我可以做另一个。

我正在使用sqlite ATM而我可能切换到MySQL。使用C#.NET。

3 个答案:

答案 0 :(得分:1)

我不知道任何纯SQL语句会完全符合您的要求。大多数运行SQL的环境(例如DBI等)都有一些方法可以告诉您受影响的行数。因此,您可以执行更新,如果没有命中任何行,则执行插入。

如果这不是一个选项,请先进行更新,然后再进行插入。如果该行存在,则更新将起作用,并且插入将在密钥违例时失败。如果该行不存在,则更新将不会显示任何行,插入应该成功。

答案 1 :(得分:0)

您也可以像以下一样同时执行这两项操作:

INSERT IGNORE ...

然后,

UPDATE ...

这将在没有AUTO_INCREMENTING字段的情况下工作。

答案 2 :(得分:0)

sqlite3_changes将告诉您最后一个语句影响了多少行。首先尝试UPDATE,如果它改变0行,则执行INSERT。

相关问题