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

update si existe, insert si no existe.

Estas en el tema de update si existe, insert si no existe. en el foro de Mysql en Foros del Web. Hola Gente ! Como bien dice el titulo quiero realizar una consulta que realiza un update si existe el capo y un insert si no ...
  #1 (permalink)  
Antiguo 08/12/2012, 16:10
 
Fecha de Ingreso: junio-2008
Mensajes: 98
Antigüedad: 15 años, 10 meses
Puntos: 2
update si existe, insert si no existe.

Hola Gente !
Como bien dice el titulo quiero realizar una consulta que realiza un update si existe el capo y un insert si no existe...
Realize 2 codigos segun la info que lei en internet pero me dice que tengo un error de sintaxis...

La tabla tiene la siguiente estructura:

user_id --- user_id_1 --- estado
(int) PKey --- (int) PKey --- (int)

El primer codigo que intento utilizar es:
Código SQL:
Ver original
  1. IF EXISTS(
  2.     SELECT * FROM confio
  3.     WHERE user_id = 1
  4.     AND user_id_1 = 14
  5. )
  6.         UPDATE confio
  7.             SET estado = 0
  8.             WHERE user_id = 1
  9.             AND user_id_1 = 14
  10. ELSE
  11.     INSERT confio
  12.         SET
  13.             estado = 1,
  14.             user_id = 1,
  15.             user_id_1 = 14
y me da "[Err] 1064 - You have an error in your SQL syntax; "

El segundo intento es:
Código SQL:
Ver original
  1. UPDATE confio
  2.             SET estado = 0
  3.             WHERE user_id = 1
  4.             AND user_id_1 = 14
  5. IF @@ROWCOUNT=0
  6.     INSERT confio
  7.         SET
  8.             estado = 1,
  9.             user_id = 1,
  10.             user_id_1 = 14

y el error es el mismo...

Aclaro que tanto las sentencias basicas de update, select e insert las estoy ejecutando bien ya que funcionan individualmente...

Que estoy escribiendo mal???

Gracias
  #2 (permalink)  
Antiguo 08/12/2012, 16:26
BalamKhai
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: update si existe, insert si no existe.

Hola, lo que tu estas haciendo lo he hecho yo a través de una variable booleana.

Es decir, si el usuario buscó un dato (a través de alguna búsqueda que tengas), la variable (que puede llamarse Nuevo) es false. Si por el contrario el usuario está ingresando un nuevo registro, Nuevo es true.

Luego, en el botón grabar la lógica es similar a:

if me.nuevo = true then
insert into ....
else
update tabla set....
endif

Espero te sirva.
Saludos
  #3 (permalink)  
Antiguo 08/12/2012, 16:28
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 si existe, insert si no existe.

Código SQL:
Ver original
  1. IF EXISTS(
  2.     SELECT * FROM confio
  3.     WHERE user_id = 1
  4.     AND user_id_1 = 14
  5. )
  6.         UPDATE confio
  7.             SET estado = 0
  8.             WHERE user_id = 1
  9.             AND user_id_1 = 14
  10. ELSE
  11.     INSERT confio
  12.         SET
  13.             estado = 1,
  14.             user_id = 1,
  15.             user_id_1 = 14
Esto es código de SQL Server. Ni MySQL ni Oracle, y creo que tampoco Postgre lo pueden manejar así.
Para lo que quieres hacer es conveniente que uses stored procedures.

Dale un al tema en el Manual de Referencia y luego vemos exactamente cómo sería (Desde ya te aclaro que incluso usando SP, la sintaxis que estás usando no está correctamente escrita en MySQL)
MySQL Stored Procedures: http://dev.mysql.com/doc/refman/5.0/...rocedures.html

PostData: El problema es que la sintaxis de los SP no está estandarizada, por lo que cada DBMS hace lo que quiere con eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 08/12/2012, 17:16
 
Fecha de Ingreso: junio-2008
Mensajes: 98
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: update si existe, insert si no existe.

Gracias por las respuestas gente ... Pero aca un capo me paso la solucion mas eficaz :

INSERT INTO confio SET estado = 0, user_id = 1, user_id_1 = 14
ON DUPLICATE KEY UPDATE estado = 0

Etiquetas: insert, select, sql, tabla, update
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 23:12.