2017-12-27 131 views
1

我知道MYSQL中的INSERT ... ON DUPLICATE KEY UPDATE语法,但是有没有办法插入别的东西呢?更具体地讲,说我有:MYSQL ON DUPLICATE KEY插入别的东西

INSERT INTO main (a,b,c,d,e) VALUES ('$a','$b','$c','$d','$e'); 

,其中列“一”是独一无二的,包含了一个任意10位数的字母数字字符串,我是在客户端的电子邮件发送到检索数据链路的公共查询字符串中使用从数据库。 我知道有可能会产生相同的字符串,因为有62^10个可能性,但想象一下$a包含一个已经存在的10位字符串。我在$a2中生成了第二个字符串作为备份,现在我想修改上面的插入语句,如果$a已经存在可以使用$a2。所以理想情况下我正在寻找类似的东西:

INSERT INTO main (a,b,c,d,e) VALUES ('$a','$b','$c','$d','$e') ON DUPLICATE KEY USE $a2 INSTEAD OF $a; 

这怎么办?据我所知ON DUPLICATE KEY INSERT something else语法不存在。此外,我的条目列表长约20-25个键值对,所以理想情况下我正在寻找只插入不同“a”而不必重写整个键值对列表的内容。 谢谢。

回答

0

你会做:

INSERT INTO main (a, b, c, d, e) 
    VALUES ('$a', '$b', '$c', '$d', '$e') 
    ON DUPLICATE KEY UPDATE a = $a2; 

编辑:

如果要添加新行,你可以这样做:

INSERT INTO main (a, b, c, d, e) 
    SELECT (CASE WHEN EXISTS (SELECT 1 FROM main m WHERE x.a = m.a) 
       THEN $a2 ELSE x.a 
      END) as a, 
      b, c, d, e 
    FROM (SELECT '$a' as a, '$b' as b, '$c' as c, '$d' as d, '$e' as e) x; 
+0

但这不是简单地更新现有条目的列'a'吗?我需要插入一个带有独特'a'的全新条目。 – Oliver

+0

@Oliver。 。 。谢谢你的澄清。 –

+0

哇,这很复杂。对不起,我不太明白这个语法。有没有一些关键字丢失?例如,'SELECT 1 FROM main m'似乎没有任何意义(可能缺少'as')?我认为'x'也是如此。最后一行是什么? 'FROM(SELECT ...'?你是否定义变量作为列名?对不起,我的无知,, – Oliver

0

您还可以使用REPLACE INTO。如果您的表的主键匹配,则会替换旧数据,否则它将作为新行插入。

+0

抱歉,但这也取代了现有的条目。需要插入一个全新的条目,同时确保列“a”是唯一的。 – Oliver