En MySQL no actualiza ON DUPLICATE KEY UPDATE

publicado por: Anonymous
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;

En MySQL: iduser+codigo (clave única)

iduser = codigo asignado al cliente

codigo = clave del contacto de cada cliente

Tengo la anterior consulta, la primera vez que se ejecuta funciona bien, pero si el cliente decide volver a subir los datos (excel) para actualizar los existentes y/o agregar nuevos clientes, no consigo que actualice los que ya existen.

¿Donde está el problema?

solución

Mario.

Por lo que veo en la consulta que haces, estás intentando modificar los campos
codigo e id_user en el update. Lo cual no tiene sentido, ya que les asignaría los mismos, valores.
Allí lo que tienes que utilizar son el resto de los campos: tipo, nombre y dni_nif que son los que tienes que actualizar.

Supongamos que tenemos esta tabla:

+----+-------------+-----------------------------+
| id | name        | team                        |
+----+-------------+-----------------------------+
|  1 | Logan       | x-men                       |
|  2 | Storm       | x-men                       |
|  3 | Beast       | x-men                       |
|  4 | Quicksilver | Brotherhood of Evil Mutants |
+----+-------------+-----------------------------+

Y queremos insertar o actualizar (como lo que estás haciendo), tenemos dos opciones:

1 – REPLACE

El comando replace, lo que hace es ejecutar un insert, pero si encuentra que el registro que se quiere insertar tiene un índice que ya existe (primary o unique), lo borra primero eh inserta el nuevo.
Por ejemplo:

REPLACE INTO `mutants` (`id`, `name`, `team`)  VALUES (4, 'Quicksilver', 'x-men');
-- Query OK, 2 rows affected (0.09 sec)

Y el resultado será:

+----+-------------+-------+
| id | name        | team  |
+----+-------------+-------+
|  1 | Logan       | x-men |
|  2 | Storm       | x-men |
|  3 | Beast       | x-men |
|  4 | Quicksilver | x-men |
+----+-------------+-------+

2 – INSERT … ON DUPLICATE KEY UPDATE

Para nuestro caso sería:

INSERT INTO `mutants` (`id`, `name`, `team`)  VALUES (4, 'Quicksilver', 'x-men')   
ON DUPLICATE KEY UPDATE team='inhumans', name='Peter Maximoff';
Query OK, 2 rows affected (0.08 sec)
-- Query OK, 2 rows affected (0.07 sec)

Y el resultado que nos da:

+----+----------------+----------+
| id | name           | team     |
+----+----------------+----------+
|  1 | Logan          | x-men    |
|  2 | Storm          | x-men    |
|  3 | Beast          | x-men    |
|  4 | Peter Maximoff | inhumans |
+----+----------------+----------+
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *