Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

UPDATE o INSERT ? [ caso especial ]

Estas en el tema de UPDATE o INSERT ? [ caso especial ] en el foro de Mysql en Foros del Web. Amigos: quisiera en una sola consulta hacer esto: Cita: Si el la clave existe, un UPDATE sino, un INSERT El tema es que guardo unas ...
  #1 (permalink)  
Antiguo 30/01/2009, 15:19
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Pregunta UPDATE o INSERT ? [ caso especial ]

Amigos: quisiera en una sola consulta hacer esto:

Cita:
Si el la clave existe, un UPDATE
sino, un INSERT
El tema es que guardo unas consultas y si ya se realizo debo incrementar el contador 'veces' pero sino.........debo insertarla en la tabla.

Saben si puedo hacerlo facil ? no quisiera hacer un SELECT COUNT para luego decidir........

GRACIAS!
__________________
Salu2!
  #2 (permalink)  
Antiguo 30/01/2009, 15:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: UPDATE o INSERT ? [ caso especial ]

REPLACE

Saludos
  #3 (permalink)  
Antiguo 30/01/2009, 17:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: UPDATE o INSERT ? [ caso especial ]

Mi tabla 'consultas' tiene los campos: claves,veces,ip,dia,hora

Cita:
REPLACE INTO consultas SET veces=veces+1 WHERE claves='nod32'
no me funciona! de hecho no me acepta el WHERE asi que no se como pueda servirme :(

Eso seria un UPDATE pero no quiero chequear existencia!!! snif
__________________
Salu2!
  #4 (permalink)  
Antiguo 30/01/2009, 17:54
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: UPDATE o INSERT ? [ caso especial ]

Dejo un ejemplo de solucion que me ha funcionado 10 puntos

Cita:
INSERT INTO consultas (claves,veces) VALUES('windows', 1) ON DUPLICATE KEY UPDATE veces = veces + 1;
Gracias igual, amigo GatorV
__________________
Salu2!
  #5 (permalink)  
Antiguo 31/01/2009, 05:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: UPDATE o INSERT ? [ caso especial ]

Cita:
Iniciado por Italico76 Ver Mensaje
Mi tabla 'consultas' tiene los campos: claves,veces,ip,dia,hora



no me funciona! de hecho no me acepta el WHERE asi que no se como pueda servirme :(

Eso seria un UPDATE pero no quiero chequear existencia!!! snif
Si te fijas en el link que te envió Gatorv, WHERE no es cláusula de REPLACE.
Para que REPLACE funcione del modo que quieres tienes que enviar TODOS los campos de nuevo, incluyendo los que ya están llenos en el registro que ya existe en la base.
De ese modo, se entiende que REPLACE no sirve para modificar sólo unos pocos campos, sino que reemplaza el registro completo. Si no envías algunos campos, estos se vacían.
Haciendo esta salvedad, te cuento que REPLACE es en cargas masivas de datos, mucho más eficiente que un UPDATE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 31/01/2009, 06:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: UPDATE o INSERT ? [ caso especial ]

gbzoloyo: amigo, entonces no tengo una clausula al estilo WHERE en REPLACE ? debo primero seleccionar un registro (o estar parado en el) para que cambie el contenido del mismo?

gracias!
__________________
Salu2!
  #7 (permalink)  
Antiguo 31/01/2009, 06:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: UPDATE o INSERT ? [ caso especial ]

"Estar parado" en un registro no existe en SQL. Si lo haces desde una aplicación es la apliacción la que realiza la conexión entre si misma y la tabla, por lo que al ver un registro en pantalla (suponiendo una interfase gráfica) la palicación en realidad está haciendo internamente un UPDATE.
Ese es el principio de diseño del ADO (o DAO) de .Net. Los conectores se encargan de establecer si leen, actualizan o borran, conforme estén configurados los CommandBuilders internos.
Pero si la cosa la quieres hacer en SQL, no hay más remedio: debes levantar el registro entero a variables y volverlo a enviar a la base para hacer un REPLACE.
La ventaja del segundo proceso, es que puedes manejar una tabla entera para actualizaciones, y luego reenviarla en un REPLACE masivo, que crearías en la aplicación. Algo así como:
Código sql:
Ver original
  1. REPLACE INTO Tabla1
  2. VALUES (valores1), (valores2), (valores3), ... (ValoresN);
enviando en los valores solamente aquellos registros que hayas efectivamente modificado.
Este tipo de sentencias se construye en las aplicaciones en foma dinámica (tengo algunas que generan 50 ó 100 reemplazos/inserciones en una sola ejecución).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 31/01/2009, 06:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: UPDATE o INSERT ? [ caso especial ]

Gracias gnzsoloyo........ voy a agendar tu respuesta :)
__________________
Salu2!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:45.