2012-07-15 16 views
13

C'è un modo per rimuovere record su chiave duplicata in MySQL?Inserimento MySQL su chiave duplicata; Elimina?

Diciamo che abbiamo un record nel database con la chiave primaria specifica e proviamo ad aggiungerne un altro con la stessa chiave - ON DUPLICATE KEY UPDATE semplicemente aggiornerebbe il record, ma esiste un'opzione per rimuovere il record se già esiste? È per la semplice funzionalità di entrata/uscita al clic di un pulsante.

+3

Usa ** trigger ** – rekenerd

+0

Grazie - Penso che sia l'unica opzione. –

risposta

1

La soluzione più vicina possibile per lo stesso è REPLACE dichiarazione. Ecco lo documentation for REPLACE.

Una domanda simile è stato chiesto sulla MySQL Forums e recommended(and only) answer era quello di utilizzare REPLACE.

+0

Sì, ma non è proprio quello che sto cercando - Non voglio sostituire l'elemento nel database - se esiste, voglio eliminarlo tutto insieme. –

+0

Immagino che l'unica opzione (se quanto sopra è l'unica soluzione possibile) in tal caso sarà di eseguire istruzioni separate - prima di verificare se il record è stato trovato quindi in base al risultato aggiungerlo o rimuoverlo. –

+0

o crea una colonna 'BOOLEAN' o' ENUM' e impostala 0 o 1, a seconda che tu lo voglia o no. – hjpotter92

4

Uso REPLACE INTO:

replace into some_table 
select somecolumn from othertable 

sarà o inserire nuovi dati o se thr stessi dati presenti verranno eliminati i dati e inserire il nuovo

+1

Le prestazioni di sostituzione in ON DUPLICATE UPDATE, sono diverse. REPLACE INTO non sta aggiornando il record - cancella il record e lo aggiunge di nuovo, se ci sono tonnellate di dati e indici coinvolti, può richiedere un po 'di tempo ... meglio usare ON DUPLICATE UPDATE, ma sta chiedendo di RIMUOVERE qualcosa come ON DUPLICATE DELETE –

-2

Sì, naturalmente, c'è una soluzione in MySQL per il vostro problema .

Se si desidera eliminare o ignorare il nuovo record di inserimento se già esiste un record duplicato nella colonna chiave della tabella, è possibile utilizzare IGNORE come questo:

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

Qui id colonna è la chiave primaria nella tabella mytbl. Ciò inserirà più valori nella tabella eliminando o saltando i nuovi record duplicati.

Spero che questo soddisfi le tue esigenze.

+1

insert ignore NON elimina nulla –

5

Si tratta di un work-around, ma funziona:

creare una nuova colonna e lo chiamano do_delete, o qualsiasi altra cosa, che lo rende una piccola-int. Quindi fare On Duplicate Key Update do_delete = 1;

A seconda della versione/connessione MySQL, è possibile eseguire più query nella stessa istruzione. Tuttavia, in caso contrario, basta eseguire una query separata subito dopo. In entrambi i casi, la domanda successiva sarebbe solo: Delete From [table] Where do_delete = 1;. In questo modo, se è una nuova voce, non eliminerà nulla. Se non era una nuova voce, la contrassegnerà per la cancellazione, quindi potrai eliminarla.

+0

Mi piace questa opzione - e non sarà necessario modificare la mia dichiarazione di aggiornamento. – ChiMo

Problemi correlati