INSERT INTO contactos
(iduser, tipo, codigo, nombre, dni_nif )
VALUES
('1','cliente','1','Juan','500000'),
('1','cliente','2','Maria','500001'),
('2','cliente','1','Sara','500002')
ON DUPLICATE KEY UPDATE
codigo = codigo,
iduser = iduser;
在MySQL中:(iduser+codigo
唯一键)
iduser = 分配给客户端的代码
code = 每个客户的联系人的密钥
我有上一个查询,第一次执行它工作正常,但如果客户端决定重新上传数据(excel)以更新现有的和/或添加新的客户端,我不能让它更新现有的。
问题出在哪里?
马里奥。
根据我在您所做的查询中看到的,您正在尝试修改更新中的 代码和id_user字段。这是没有意义的,因为它会为它们分配相同的值。在那里,您必须使用其余字段:类型、名称和 dni_nif,这些是您必须更新的字段。
假设我们有这张表:
我们想要插入或更新(就像你正在做的那样),我们有两个选择:
1 - 更换
replace 命令所做的是执行插入,但如果它发现要插入的记录有一个已经存在的索引(主索引或唯一索引),它首先将其删除并插入新的。例如:
结果将是:
2 - 插入 ... 在重复密钥更新时
对于我们的情况,它将是:
它给我们的结果是:
问题是您正在使用查询
INSERT
来修改现有数据,您应该使用查询UPDATE
,因为它INSERT
总是会尝试将数据插入表中,如果有重复的键,您会收到您提到的错误 (ON DUPLICATE KEY
) .在尝试修改表中的现有数据时,您应该运行类似于以下内容的查询: