【问题标题】:SQLite insert if not exists else update [duplicate]如果不存在,则 SQLite 插入,否则更新 [重复]
【发布时间】:2014-11-29 09:47:56
【问题描述】:

所以我在这里看到了一些类似的问题,但我就是无法理解。

我的桌子:

'timestamp' int(30) NOT NULL,
'clientguid' varchar(32) NOT NULL,
'clientip' varchar(32) NOT NULL,
'serverip' varchar(32) NOT NULL)

我有 4 个变量

$TimeStamp
$ClientGUID
$ClientIP
$ServerIP

我的查询应该这样做: 如果有clientguid$ClientGUID 匹配的行:

UPDATE 'mytablename'
SET 'timestamp' = '$TimeStamp','clientip' = '$ClientIP','serverip' = '2.2.2.24'
WHERE 'mytablename'.'clientguid' = '$ClientGUID');

如果没有匹配的行:

INSERT INTO 'mytablename' ('timestamp','clientguid','clientip','serverip') 
VALUES($TimeStamp,'$ClientGUID', '$ClientIP', '$ServerIP');

我不必担心转义和验证,这已经完成了 我只需要一个可以完成此任务的声明。 :)

【问题讨论】:

  • 那篇文章是 SQL Server 2008,而不是 SQLite:P
  • stackoverflow.com/questions/418898/… ....................
  • 然后查看@edelwater 的重复建议......看起来你不是第一个问这个问题的人......搜索是你的好朋友;)
  • edelwater,我看到了这个问题,但我不确定如何指定要在哪一列上查找匹配项。如果我只是执行此更新 SQL 命令,那么它是否会使用匹配的服务器 ip 更新第一行?客户端IP?我特别想通过客户端 GUID 来做。
  • 在 418898 中注意答案中的“选择”

标签: php sql sqlite insert


【解决方案1】:

如果你在你的表上设置了唯一键,那么你可以先插入,如果错误重复记录,然后捕获它们并进行更新。这通常比一些如何首先存在行然后进行更新更快。

【讨论】:

    【解决方案2】:

    为列 clientguid 创建唯一索引 然后你可以使用 INSERT .... ON DUPLICATE KEY UPDATE

    INSERT INTO yourtable (timestanp, clientguid,clientip, serverip)
    VALUES(NOW(), $clientguid, '$clientip', '$serverip')
    ON DUPLICATE KEY UPDATE
        timestamp = NOW(),
        clientip = VALUES(clientip),
        serverip = VALUES(serverip)
    

    【讨论】:

    • 这在 SQLite 中不起作用。
    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2019-10-17
    • 2012-12-13
    • 2011-04-30
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多