values update not into ejemplo duplicate mysql sql-update sql-insert upsert

not - on duplicate key update mysql ejemplo



Comportamiento MySQL de ON DUPLICATE KEY UPDATE para mĂșltiples campos ÚNICOS (2)

  1. cómo se comporta MySQL ... Se comporta como se esperaba, es decir, se ejecuta la cláusula ON DUPLICATE KEY.

  2. ¿Puedo tener una actualización para cualquiera? ... En realidad, solo tiene una cláusula ON DUPLICATE KEY, por lo que necesita poner algo de código para diferenciar la restricción involucrada. Afortunadamente, es posible. Lo único que debe saber, el orden de asignación es importante, y puede asignarlo varias veces. Supongamos que tiene una restricción única en a y b, y desea actualizar c solo si se trata de una singularidad: ... ACTUALIZACIÓN CLAVE c = IF (a = VALORES (a) y b <> VALORES (b), VALORES ( c), c), b = VALORES (b)

    pero si cambia el orden de las asignaciones, la segunda condición dentro de si siempre será falsa.

  3. Ver 2

Desde MySQL 4.1.0 en adelante, es posible agregar la instrucción ON DUPLICATE KEY UPDATE para especificar el comportamiento cuando los valores insertados (con INSERT o SET o VALUES ) ya están en la tabla de destino wrt PRIMARY KEY o en algún campo UNIQUE . Si el valor de PRIMARY KEY o algún campo UNIQUE ya está en la tabla, INSERT se reemplaza por un UPDATE .

  • ¿Cómo se comporta ON DUPLICATE KEY UPDATE en caso de que haya varios campos UNIQUE en mi tabla?

  • ¿Puedo tener solo una actualización, si alguno de los campos UNIQUE coincide?

  • ¿Puedo tener una actualización solo si ambos campos UNIQUE coinciden simultáneamente?


Considerar

INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1;

si a y b son campos UNIQUE , la UPDATE produce en a = 1 OR b = 2 . También cuando la condición a = 1 OR b = 2 se cumple con dos o más entradas, la actualización se realiza solo una vez.

Ej. Aquí tabla tabla con ID y Nombre campos UNIQUE

Id Name Value 1 P 2 2 C 3 3 D 29 4 A 6

Si la consulta es

INSERT INTO table (Id, Name, Value) VALUES (1, C, 7)

entonces obtenemos

Id Name Value 1 P 2 2 C 3 3 D 29 4 A 6 1 C 7

que viola la singularidad de Id y Nombre. Ahora con

INSERT INTO table (Id, Name, Value) VALUES (1, C, 7) ON DUPLICATE KEY UPDATE Value = 7

obtenemos

Id Name Value 1 P 7 2 C 7 3 D 29 4 A 6

El comportamiento en múltiples claves es el siguiente

UPDATE en ON DUPLICATE KEY UPDATE se realiza si uno de los campos UNIQUE es igual al valor que se insertará. Aquí, la UPDATE se realiza en Id = 1 OR Name = C Es equivalente a

UPDATE table SET Value = 7 WHERE Id = 1 OR Name = C

¿Qué pasa si solo quiero una actualización, para cada tecla?

Puede usar la instrucción UPDATE con la palabra clave LIMIT

UPDATE table SET Value = 7 WHERE Id = 1 OR Name = C LIMIT 1;

que dará

Id Name Value 1 P 7 2 C 3 3 D 29 4 A 6

¿Qué sucede si deseo una actualización solo si los valores de ambas claves coinciden?

Una solución es ALTER TABLE y hacer que la PRIMARY KEY (o la singularidad) funcione en ambos campos.

ALTER TABLE table DROP PRIMARY KEY ADD PRIMARY KEY (Id, Name);

Ahora en

INSERT INTO table (Id, Name, Value) VALUES (1, C, 7) ON DUPLICATE KEY UPDATE Value = 7

obtenemos

Id Name Value 1 P 2 2 C 3 3 D 29 4 A 6 1 C 7

ya que no se encuentra ningún duplicado (en ambas claves).