代码之家  ›  专栏  ›  技术社区  ›  Xeoncross

mysql-在两列上为重复键创建唯一索引

  •  5
  • Xeoncross  · 技术社区  · 15 年前

    我有一张有四列的桌子。我希望能够在创建时插入或更新值列(我不关心索引行ID)。

    CREAT TABLE tablename (
     id,   (primary)
     user_id, (index)
     setting_id, (index)
     value  (index)
    );
    

    最初,每当我想保存一个值时,我都会运行一个“replacetinto…”查询。但是我 read about the problems 而是选择了一个插入…在重复的密钥更新时。

    问题是我没有“insert into…”的单列。在“重复键更新”中,用于确定这是新行还是需要更新现有行。

    所以我想我会使用一个唯一的键,它是两列的混合,使这一行具有唯一性。(

    CREATE UNIQUE INDEX index_name ON table(user_id, setting_id);
    

    但是,我不知道如何从这里前进。当我试图找出一个已经存在的具有这两个列值的行时,如何构造查询来检查这个新索引?

    INSERT INTO `tablename` (value, user_id, setting_id) VALUES (1,34,15) ON DUPLICATE KEY UPDATE
    

    编辑:

    通过删除ID主列,只留下(设置_id、用户_id和值),我可以在(设置_id、用户_id)上创建主索引,然后执行以下查询。 more help here .

    INSERT INTO tablename (user_id, setting_id, value)
    VALUES (42, 1, 12)
    ON DUPLICATE KEY UPDATE value = 12
    
    1 回复  |  直到 15 年前
        1
  •  8
  •   Chris Gutierrez    15 年前

    你的查询结果会像这样…

    INSERT INTO table (value,user_id,setting_id) VALUES (1,34,15)
      ON DUPLICATE KEY UPDATE value = 1, user_id = 34, setting_id = 15;