【发布时间】:2021-11-11 21:32:09
【问题描述】:
我四处寻找,但没有找到是否可能。
我有这个 MySQL 查询:
INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8)
字段 id 有一个“唯一索引”,因此不能有两个。现在,如果数据库中已经存在相同的 id,我想更新它。但是我真的必须再次指定所有这些字段吗,例如:
INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8)
ON DUPLICATE KEY UPDATE a=2,b=3,c=4,d=5,e=6,f=7,g=8
或者:
INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8)
ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b),c=VALUES(c),d=VALUES(d),e=VALUES(e),f=VALUES(f),g=VALUES(g)
我已经在插入中指定了所有内容...
一个额外的说明,我想使用解决方法来获取 ID!
id=LAST_INSERT_ID(id)
我希望有人能告诉我最有效的方法是什么。
【问题讨论】:
-
AFAIK,重述每一列的方法,
a=VALUES(a), b=VALUES(b), ...是你需要走的路。这就是我对所有INSERT ON DUPLICATE KEY UPDATE语句的处理方式。 -
澄清一下,只要您理解所回答的问题是:您必须重述您想要更新的每一列吗?是的,如果您想在 25 列的表中插入或更新 8 列,则必须两次声明这 8 列——一次在插入部分,一次在更新部分。 (您可以在更新部分跳过主键,但最简单的方法是预先格式化“a=1,b=2,c=3”字符串并将其嵌入两次。)但是,您不必重述剩余的 17 列你不想改变。如果它变成 UPDATE,它们将保留现有值。
-
我添加了该评论,因为问题和答案让我不确定带有这种 INSERT 的未提及列,然后我在确切了解要测试的内容后对其进行了测试。 INSERT ON DUPLICATE KEY UPDATE 使未提及的列在 UPDATE 上保持不变,但在 INSERT 上为它们提供默认值。使用 REPLACE INTO,未提及的列始终获取默认值,而不是现有值。
-
检查stackoverflow.com/questions/2472229/…,我想你在找什么