Muchos desarrolladores todavía ejecutan una consulta para verificar si un campo está presente en una tabla y luego ejecutar una consulta de inserción o actualización de acuerdo con el resultado de la primera consulta. Intenta usar la sintaxis ON DUPLICATE KEY, esto es mucho más rápido y mejor que ejecutar 2 consultas.Más información se puede encontrar here
insertar en la tabla (A, B, C) VALORES (4,5,6) EN DUPLICATE KEY ACTUALIZACIÓN c = 9;
si desea mantener el mismo valor para C que puede hacer una actualización con el mismo valor
Insertar en la tabla (A, B, C) VALORES (4,5,6) ON DUPLICATE KEY UPDATE c = 6;
la diferencia entre 'reemplazar' y 'en clave duplicada':
reemplazar: inserciones o eliminaciones e inserta
de clave duplicada: inserciones o actualizaciones
si su tabla no tiene una clave principal o clave única, el reemplazo no tiene ningún sentido.
También puede usar la función VALUES
para evitar tener que especificar los valores reales dos veces. P.ej. en lugar de
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;
puede utilizar
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);
Dónde VALUES(c)
evaluará al valor especificado prevously (6).
Creó más que en la entrada para REEMPLAZAR EN el usuario SET ip = '$ uip', lastcheck = '$ tim' – unrelativity
¿IP o última comprobación es una clave principal o un índice único? – carl
Entonces se espera el comportamiento que está experimentando. Un campo debe ser primario o exclusivo para que esto funcione. De lo contrario, ¿cómo sabría MySQL para evitar duplicados? Parece que debe tener el user_id en esta tabla (como clave principal) que también configura en su reemplazo. – carl