我知道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"无需重写整个键值对列表。
谢谢。
答案 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。如果表的主键匹配,则替换旧数据,否则将插入新行。