2012-07-15 17 views
13

¿Hay alguna manera de eliminar registros en claves duplicadas en MySQL?inserción de MySQL en clave duplicada; ¿borrar?

Digamos que tenemos un registro en la base de datos con la clave primaria específica e intentamos agregar otro con la misma clave - ON DUPLICATE KEY UPDATE simplemente actualizaría el registro, pero ¿existe la opción de eliminar el registro si ya existe? Es para una funcionalidad de entrada/salida simple al hacer clic en un botón.

+3

Use ** trigger ** – rekenerd

+0

Gracias - Creo que esa es la única opción. –

Respuesta

1

La solución más cercana posible para la misma es REPLACE declaración. Aquí está el documentation for REPLACE.

Una pregunta similar se le preguntó sobre MySQL Forums y la recommended(and only) answer era utilizar REPLACE.

+0

Sí, pero eso no es exactamente lo que estoy buscando, no quiero reemplazar el elemento en la base de datos, si existe deseo deshacerme de todo junto. –

+0

Supongo que la única opción (si lo anterior es la única solución posible) en ese caso será ejecutar estados separados: primero para verificar si se encuentra el registro y luego, en función del resultado, agréguelo o elimínelo. –

+0

o crea una columna 'BOOLEAN' o' ENUM' y configúrala 0 o 1, dependiendo de lo que quieras o no. – hjpotter92

4

Uso REPLACE INTO:

replace into some_table 
select somecolumn from othertable 

, o bien insertar nuevos datos o si existen thr mismos datos, se eliminarán los datos e insertar uno nuevo

+1

El rendimiento de reemplazar en vs ON DUPLICATE UPDATE, es diferente. REPLACE INTO no está actualizando el registro; borra el registro y lo vuelve a agregar, si tiene toneladas de datos e índices involucrados, puede tomar un tiempo ... es mejor usar ON DUPLICATE UPDATE, pero está pidiendo que se elimine algo como ON DUPLICATE DELETE –

-2

Sí, por supuesto, hay una solución en MySQL para su problema .

Si desea eliminar o ignorar el nuevo disco de inserción si ya existe un registro duplicado en la columna de clave de la tabla, puede utilizar IGNORE así:

insert ignore into mytbl(id,name) values(6,'ron'),(7,'son'); 

Aquí id columna es clave primaria en la tabla mytbl. Esto insertará múltiples valores en la tabla al eliminar u omitir los nuevos registros duplicados.

Espero que esto cumpla con sus requisitos.

+1

insertar ignorar NO borrar nada –

5

Es una solución temporal, pero funciona:

crear una nueva columna y lo llaman do_delete, o lo que sea, lo que es un pequeño-int. A continuación, haga On Duplicate Key Update do_delete = 1;

Dependiendo de su versión/conexión de MySQL, puede ejecutar múltiples consultas en la misma instrucción. Sin embargo, si no, solo ejecute una consulta por separado inmediatamente después de las palabras. De cualquier manera, la siguiente consulta sería simplemente: Delete From [table] Where do_delete = 1;. De esta forma, si es una entrada nueva, no eliminará nada. Si no se trata de una entrada nueva, la marcará para eliminarla y luego podrá eliminarla.

+0

Me gusta esta opción, y no necesitaré cambiar mi declaración de actualización. – ChiMo

Cuestiones relacionadas