Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2011
Avatar de pablonill
pablonill pablonill is offline
Miembro
 
Registrado: dic 2006
Posts: 92
Poder: 18
pablonill Va por buen camino
Lightbulb Insertar si existe modificar - MySQL

Buenos dias, antes que nada gracias por su atencion!. Tengo la siguiente tabla.

Código SQL [-]
CREATE TABLE `productos` (
  `codigo` varchar(20) NOT NULL,
  `detalle` varchar(60) NOT NULL,
  `proveedor` int(11) DEFAULT NULL,
  `precio_actual` float(9,2) DEFAULT NULL,
  `precio_anterior` float(9,2) DEFAULT NULL,
  `fecha_modificacion` date DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Necesito hacer lo siguiente, me traen una lista de precios de productos, en caso de que no exista debo insertarlo en caso de que exista debo actualizar el precio del producto, esta consulta funciona bien para un registro.

Código SQL [-]
INSERT INTO productos (codigo, detalle, proveedor, precio_actual, fecha_modificacion)
VALUES
(001000005,'TUBOS POLIETILENO 1/2"K10',1,368.42,'2011/11/08')
ON DUPLICATE KEY UPDATE precio_actual = 368.42;

Pero necesito saber como hacer esta consulta para varios registros, ya que hacerlo uno por uno se pone inmensamente lento. Aclaracion uso MySQL. Muchas gracias.
Responder Con Cita
  #2  
Antiguo 08-11-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Quiero suponer que donde escribiste

Código SQL [-]
ON DUPLICATE KEY UPDATE precio_actual = 368.42;

en realidad es

Código SQL [-]
ON DUPLICATE KEY UPDATE precio_actual = 1368.42;

de lo contrario, no entiendo cuál es el valor de actualización.

El manual de MySQL menciona el uso de la función values para la cláusula update para inserciones masivas. Quedaría algo así:

Código SQL [-]
INSERT INTO productos (codigo, detalle, proveedor, precio_actual, fecha_modificacion)
VALUES
  (001000005, 'TUBOS POLIETILENO 1/2"K10', 1, 368.42, '2011/11/08'),
  (001000006, 'OTRO PRODUCTO', 1, 512.26, '2011/11/10')
ON DUPLICATE KEY UPDATE precio_actual = VALUES(precio_actual);

// Saludos
Responder Con Cita
  #3  
Antiguo 08-11-2011
Avatar de pablonill
pablonill pablonill is offline
Miembro
 
Registrado: dic 2006
Posts: 92
Poder: 18
pablonill Va por buen camino
Hola roman, muchas gracias por la pronta respuesta!, esta bien la consulta como figura!

Si se hace el insert el precio es 368.42 en caso de que exista actualizamos el precio con 368.42, espero ser claro!

En cuanto a la consulta que me pusiste la hice pero sin el identificador VALUES, ya lo pruebo y te comento. Muchas gracias.
Responder Con Cita
  #4  
Antiguo 08-11-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Estaba confundido; leí la columna 1 como parte del dato del precio.

En todo caso, por lo que veo, no puedes omitir el values, a menos que actualices con un precio fijo todos los productos ya existentes.

// Saludos
Responder Con Cita
  #5  
Antiguo 09-11-2011
Avatar de pablonill
pablonill pablonill is offline
Miembro
 
Registrado: dic 2006
Posts: 92
Poder: 18
pablonill Va por buen camino
Listo roman, muchas gracias, probado y confirmado.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Insertar y modificar al mismo tiempo ! hecospina Firebird e Interbase 4 17-09-2008 13:40:28
Insertar y/o modificar un campo con decimales rafita Varios 5 30-07-2007 10:41:28
Como insertar, eliminar y modificar en c#? danytorres .NET 2 09-05-2006 22:29:47
lentitud al Modificar/Insertar kukinn Conexión con bases de datos 3 23-03-2004 09:37:57
Problema el insertar/modificar registro ing_alsaac Conexión con bases de datos 0 29-02-2004 09:18:15


La franja horaria es GMT +2. Ahora son las 23:58:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi