SQLite如果存在更新或插入

时间:2016-06-24 23:14:13

标签: sql sqlite insert

抱歉我的英文不好, 我有4列数据库,我需要“更新或插入”SQL命令 http://i.stack.imgur.com/Tdd6f.jpg

我希望如果MAC地址相同,那么只更新“maki”和“IP”列。 不要更改“dur”值

如果MAC地址没有我的数据库,则INSERT maki,MAC,IP数据。 我的代码有效,但它将“dur”列数据1更改为0(默认值)

INSERT INTO table (MAC, maki, IP)
Select MAC , maki , IP WHERE Not EXISTS (SELECT 1 FROM table WHERE MAC = '" + MAC + "' and dur = 1)

2 个答案:

答案 0 :(得分:1)

这里你最好的策略可能是使用SQLite"交易。"

请参阅:https://www.sqlite.org/isolation.html(" SQLite中的隔离。")

顺便说一下 非常重要您仔细阅读了该网页 (" SQLite是一个非常特殊的案例......")

基本上,您启动一​​个事务,然后执行SELECT。如果返回一行,则更新该行。否则,插入一个新行。然后,提交事务。

用SQL术语来说,"事务"是" 原子工作单元。" 要么"一切都会发生," "什么都没有。" 而且,从其他所有用户的角度来看,此活动已隔离,因此"正在进行中"行动将不会被看到。

答案 1 :(得分:-1)

您可以使用INSERT OR REPLACE声明。或者,您可以选择将记录计数到变量中,以确定MAC是否已存在。如果是,则可以执行常规UPDATE,否则执行标准INSERT

您可以在此处查看INSERT OR REPLACE的简单示例:http://sql.learncodethehardway.org/book/ex11.html

以下是有关REPLACEhttps://www.sqlite.org/lang_replace.html

的一些信息