Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-在两列上为重复键创建唯一索引_Sql_Mysql - Fatal编程技术网

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

MySQL-在两列上为重复键创建唯一索引,sql,mysql,Sql,Mysql,我有一个4列的表。我希望能够在创建时插入或更新value列(我不关心索引行ID) 最初,每次我想保存一个值时,我都要运行一个“替换为…”查询。但后来我选择了插入到。。。在重复密钥更新时 问题是,我没有“在重复密钥更新时插入到…中”的单列来确定这是新行还是需要更新现有行 所以我想我会使用一个唯一的键,它是使此行唯一的两列的混合( 但是,我不知道如何从这里开始。当我试图找出一行已经存在且具有这两个列值时,如何构造查询以检查这个新索引 INSERT INTO `tablename` (value, u

我有一个4列的表。我希望能够在创建时插入或更新value列(我不关心索引行ID)

最初,每次我想保存一个值时,我都要运行一个“替换为…”查询。但后来我选择了插入到。。。在重复密钥更新时

问题是,我没有“在重复密钥更新时插入到…中”的单列来确定这是新行还是需要更新现有行

所以我想我会使用一个唯一的键,它是使此行唯一的两列的混合(

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

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

通过删除只留下的ID主列(设置\ ID、用户\ ID和值),我能够在(设置\ ID、用户\ ID)上创建一个主索引,然后下面的查询工作了


你的查询结果会是这样的

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