MYSQL ON DUPLICATE KEY插入其他内容

时间:2017-12-27 12:56:50

标签: php mysql on-duplicate-key

我知道MYSQL中的INSERT ... ON DUPLICATE KEY UPDATE语法,但有没有办法插入其他内容?更具体地说,我有:

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

其中列" a"是唯一的,包含一个随机的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"无需重写整个键值对列表。 谢谢。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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