在mysql中,我目前正在使用如下的插入语句(uid是主键)
INSERT INTO test ( uid, datetime, precip, sds ) VALUES (?,?,?,?) on duplicate key update uid = "<uid>";
现在,我需要在mysql中执行多行插入。我需要检查uid是否已经存在,更新else插入。由于uid是主键,因此每个新行都包含一个新的uid。如果语法不正确,请告诉我?
INSERT INTO test ( uid, datetime, precip, sds ) VALUES (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?) on duplicate key update uid = values(<uid for first record>), uid = values(<uid for second record>), uid = values(<uid for third record>), uid = values(<uid for fourth record>);
答案 0 :(得分:0)
您的问题不明确,有两种解释:
如果主UID已存在于数据库中,您希望使用备用UID创建新行。
这看起来像你写的正确解释&#34;每个新行包含一个新的uid&#34;。但这看起来并不自然。
为此,ON DUPLICATE KEY UPDATE
不是正确的工具,因为update
现有的原始文件,如其名称所示,不会创建新的原始文件。
因此,为了实现这一点,您可以正常insert
,检查插入是否成功,如果由于重复的uid导致失败,请插入替代uid。如果再次发生冲突,不知道你想做什么,在循环中运行它?看起来错误的方式。
如果存在具有相同uid的行,则要更新,否则插入新行。换句话说,您希望插入一个新行,但只更新现有的行。
这看起来就像你写的那样正确的解释&#34;我需要检查uid是否已经存在,更新其他插入&#34;并且当您尝试使用&#34;在重复键更新时#34;。它看起来也更自然。
要实现这一点,您可以使用ON DUPLICATE KEY UPDATE
update
对现有行添加新值(但不要触及uid
):
INSERT INTO test ( uid, datetime, precip, sds )
VALUES (?,?,?,?)
ON DUPLICATE KEY UPDATE
datetime = VALUES(datetime),
precip = VALUES(precip),
sds = VALUES(sds)
当您有多个值时,ON DUPLICATE KEY UPDATE
语句不会更改。
它读取&#34;如果该行存在,则更新日期时间,沉淀和sds&#34;。