【问题标题】:MySQL equivelant of SQLite INSERT or REPLACE INTO [duplicate]MySQL相当于SQLite INSERT或REPLACE INTO [重复]
【发布时间】:2015-09-21 02:49:38
【问题描述】:

我正在将一些旧代码从 SQLite 移动到我的网站,以便通过网站访问。我经常使用的查询之一是INSERT or REPLACE INTO 查询,它检查表中是否存在一行(基于第一个值),如果存在,它将用该行替换该行中的数据在VALUES 中指定。但是,如果未找到该行,它将INSERT 将该行放入表中。

查询示例(简化):

INSERT or REPLACE INTO player_currency (player_id, gold) VALUES (1, 500)

这将找到 ID 为 1 的玩家并将他的金币设置为 500,无论他之前是否在桌子上。

我不确定它是否重要,但我使用的是 XAMMP 5.6.8(考虑到这是用于连接数据库的内容,我已将 PHP 添加到标签中,如果不重要,请随意删除它'属于)

  • 数据库连接:(PHP) PDO 库
  • MySQL 版本:5.6.24
  • PhpMyAdmin 版本:4.4.3

【问题讨论】:

标签: mysql sqlite


【解决方案1】:
INSERT INTO player_currecy (player_id, gold) VALUES(1, 500) ON DUPLICATE KEY UPDATE gold = VALUES(gold)

然后记住将 id 作为主键。

【讨论】:

    【解决方案2】:

    假设 player_id 是主键,你可以这样做:

    INSERT INTO player_currency (player_id, gold) VALUES (1,500) ON DUPLICATE KEY UPDATE gold=500;
    

    【讨论】:

    • “它将用VALUES中指定的行替换该行中的数据”,因为他想要他输入VALUES的值,那么我猜它可能会有所不同,然后这个sql不会小心地工作,因为这总是会插入 500,而不是动态插入相同的值。
    • 它会起作用,他只需要设置他的代码以在 SQL 字符串中设置两次值。我一直在使用它。
    • 否定了你的 -1 仅仅因为你回答了这个问题,但是 Djip 的答案是正确的,因为它适应了这个值而不需要硬编码。
    猜你喜欢
    • 2013-03-20
    • 2010-09-29
    • 2016-08-09
    • 2012-07-27
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多