update into ejemplo mysql duplicate-data

into - Insertar... en clave duplicada no actualizar nada usando MySQL



replace mysql (2)

Mi problema es que tengo varias llaves únicas en una mesa.

  1. Insertar ignorar no es una opción porque suprime los errores.
  2. MySQL no tiene soporte para ningún tipo de condicionales fuera de una declaración (por ejemplo, si (cond) luego inserta else no inserta)
  3. Los procedimientos almacenados no son una opción (el único lugar donde puedo usar las declaraciones if / else)
  4. La clave duplicada podría actualizar una clave con un nuevo valor, pero quiero que las claves únicas no cambien en caso de que uno falle la restricción única.

Entonces, la única opción sería duplicar simplemente no actualizar nada. ¿Hay alguna manera de que pueda lograr esto? ¿O hay otras opciones?


Encontré otra opción en caso de que alguien encuentre este problema.

Si su tabla tiene una clave primaria autoincrementada, puede actualizar el pk de esta manera:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;


Si desea ON DUPLICATE KEY UPDATE para no hacer nada, simplemente configure un valor de columna para el valor existente. Otros conflictos, como las restricciones de clave externa, surgirán, a diferencia de la IGNORE clave IGNORE , pero no cambiará ningún valor en caso de conflicto.

INSERT INTO table (value1, value2) VALUES (''1'', ''2'') ON DUPLICATE KEY UPDATE value1 = value1;

Si desea asegurarse de que no haya cambios en los datos válidos en caso de conflicto, puede agregar una columna con datos arbitrarios en la tabla y usarla para la instrucción UPDATE .

Una tercera opción si desea mantener toda la lógica en su aplicación y no en la base de datos es ejecutar primero una instrucción SELECT para inspeccionar posibles conflictos antes de ejecutar su INSERT/UDPATE .

Aunque se descartó su escenario, un procedimiento almacenado también podría proporcionar esta lógica en una única llamada a la base de datos.