java
  • sql
  • sqlite
  • 2015-04-17 25 views 1 likes 
    1

    所以我有我的SQL查询的问题,首先我运行此,以确保该条目是在数据库:INSERT或忽略插入重复语句

    "INSERT OR IGNORE INTO `scores` (`uuid`) VALUES ('" + stat.player + "')" 
    

    接下来,我跑:

    "UPDATE scores SET uuid = '" + stat.player + "', level = '" 
           + stat.level + "', xp = '" + stat.xp 
           + "', xpToNextLevel = '" + stat.xpToNextLevel 
           + "', attackPoints = '" + stat.attackPoints 
           + "', defencePoints = '" + stat.defencePoints 
           + "', kills = '" + stat.kills + "', deaths = '" 
           + stat.deaths + "', monsterKills = '" + stat.monsterKills 
           + "' WHERE uuid = '" + stat.player + "'"\ 
    

    我的问题是,运行“INSERT或IGNORE”不会忽略是否有重复的值。每次运行它时,它都会插入一个具有相同uuid的新行,并使用相同的uuid更新所有行。

    我想我可能会错过一些东西,如果你能帮忙,我会很感激。

    CREATE TABLE的说法是:

    CREATE TABLE scores (
        uuid varchar(128) NOT NULL, 
        level int(11) NOT NULL DEFAULT '1', 
        xp int(11) NOT NULL DEFAULT '0', 
        xpToNextLevel int(11) NOT NULL DEFAULT '500', 
        attackPoints int(11) NOT NULL DEFAULT '0', 
        defencePoints int(11) NOT NULL DEFAULT '0', 
        kills int(11) NOT NULL DEFAULT '0', 
        deaths int(11) NOT NULL DEFAULT '0', 
        monsterKills int(11) NOT NULL DEFAULT '0') 
    

    回答

    2

    INSERT OR IGNORE SQL语句看起来不错。最有可能你的uuid没有被设置为UNIQUEPRIMARY KEY

    试试这个CREATE TABLE代替:

    CREATE TABLE scores (
        uuid varchar(128) PRIMARY KEY, 
        level int(11) NOT NULL DEFAULT '1', 
        xp int(11) NOT NULL DEFAULT '0', 
        xpToNextLevel int(11) NOT NULL DEFAULT '500', 
        attackPoints int(11) NOT NULL DEFAULT '0', 
        defencePoints int(11) NOT NULL DEFAULT '0', 
        kills int(11) NOT NULL DEFAULT '0', 
        deaths int(11) NOT NULL DEFAULT '0', 
        monsterKills int(11) NOT NULL DEFAULT '0') 
    
    相关问题