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

insert condicional

Estas en el tema de insert condicional en el foro de Mysql en Foros del Web. Buenas, tengo la siguiente duda... existe la manera de que una consulta unica pueda hacer un insert verificando que no existe el dato en esa ...
  #1 (permalink)  
Antiguo 03/04/2009, 12:48
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
insert condicional

Buenas, tengo la siguiente duda... existe la manera de que una consulta unica
pueda hacer un insert verificando que no existe el dato en esa misma tabla?
estuve probando con un WHERE NOT EXISTS pero creo q no puede aplicarse a una misma tabla...
tb probe creando una tabla temporal pero no es lo que quiero...
  #2 (permalink)  
Antiguo 03/04/2009, 13:22
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, 5 meses
Puntos: 2658
Respuesta: insert condicional

Código sql:
Ver original
  1. INSERT IGNORE INTO tabla(campos) VALUES(valores);

Inserta si y sólo si el campo usado de PK no existe; en caso de existir no inserta pero tampoco devuelve un error y sigue con el resto de las inserciones.
También tienes otras opciones:
Código sql:
Ver original
  1. INSERT INTO ... ON DUPLICATE KEY UPDATE SET catualizaciones
Código SQL:
Ver original
  1. REPLACE INTO tabla VALUES();
REPLACE reemplaza el registro completo si ya existe una clave igual.

También tienes la posibilidad de usar Store Procedures.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/04/2009, 13:47
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: insert condicional

Gracias por las respuestas, el tema es que esta tabla no tiene pk, y por otro lado no puedo reemplazar... esta tabla es una tabla q registra votos de una info...
si ya voto ese usuario , entonces no deja q lo haga d vuelta...
lo pude solucionar asi (debe haber un registro por lo menos)
Código:
INSERT INTO votosinfo (campo1,campo2,voto) 
						SELECT 'hola',2,'tipovoto' FROM votosnoticia
						 WHERE NOT EXISTS ( 
						 SELECT 1 FROM votosinfo WHERE campo1='hola' and   campo2=2)
						 limit 1;
saludos.!
  #4 (permalink)  
Antiguo 21/10/2011, 16:48
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: insert condicional

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código sql:
Ver original
  1. INSERT IGNORE INTO tabla(campos) VALUES(valores);

Inserta si y sólo si el campo usado de PK no existe; en caso de existir no inserta pero tampoco devuelve un error y sigue con el resto de las inserciones.
También tienes otras opciones:
Código sql:
Ver original
  1. INSERT INTO ... ON DUPLICATE KEY UPDATE SET catualizaciones
Código SQL:
Ver original
  1. REPLACE INTO tabla VALUES();
REPLACE reemplaza el registro completo si ya existe una clave igual.

También tienes la posibilidad de usar Store Procedures.
disculpa trato de insertar registros sin que se repitan pero yo los cargo de un txt y pues solo una vez me sale con el ignore ya después no hace nada no se siguen insertando, y obvio por el ignore no manda mensaje pero pues tampoco sigue instertando con esta sentencia no se puede usar ignore? que me recomiendas?

Código MySQL:
Ver original
  1. LOAD DATA INFILE '/micarpeta/output_2011-10-01.txt'
__________________
De informáticos y locos todos tenemos un poco
  #5 (permalink)  
Antiguo 21/10/2011, 17:01
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, 5 meses
Puntos: 2658
Respuesta: insert condicional

Lo primero que tienes que hacer es leer el Manual de Referencia (LOAD DATA). Allí es donde encontrarás las respuestas a cosas como esta.
Cita:
Si especifica IGNORE, los registros de entrada que dupliquen un registro existente en una clave única se ignoran. Si no especifica ninguna opción, el comportamiento depende de si la palabra LOCAL se ha especificado o no. Sin LOCAL, ocurre un error cuando se encuentra un valor de clave duplicado, y el resto del fichero de texto se ignora. Con LOCAL, el comportamiento por defecto es el mismo que si se especifica IGNORE, esto es porque el servidor no tiene forma de parar la transmisión del fichero en medio de la operació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)
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 03:52.