在DUPLICATE KEY UPDATE上

MySQL有这样的东西:

INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;

据我所知,这个功能在SQLite中不存在,我想知道的是,如果有任何方法可以存档相同的效果而不必执行两个查询。 另外,如果这是不可能的,你更喜欢什么:

  • SELECT +(INSERT或UPDATE)
  • 更新(如果UPDATE失败,则返回INSERT)

  • INSERT OR IGNORE INTO visits VALUES ($ip, 0);
    UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
    

    这要求“ip”列有一个UNIQUE(或PRIMARY KEY)约束。


    编辑:另一个伟大的解决方案:https://stackoverflow.com/a/4330694/89771。


    我更喜欢UPDATE (+ INSERT if UPDATE fails) 。 更少的代码=更少的错误。


    当前的答案只能在sqlite或mysql中使用(取决于你是否使用OR)。 所以,如果你想交叉dbms兼容性,下面会做...

    REPLACE INTO `visits` (ip, value) VALUES ($ip, 0);
    
    链接地址: http://www.djcxy.com/p/19787.html

    上一篇: ON DUPLICATE KEY UPDATE

    下一篇: Insert Update stored proc on SQL Server