SQLite “Inserire o sostituire INTO” “UPDATE ... WHERE” vs.
Domanda
Non ho mai visto il INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")
sintassi utilizzata in SQL prima, e mi chiedevo perché è meglio di UPDATE names SET name = "John" WHERE id = 1
. C'è qualche buona ragione per usare uno sopra l'altro. È questa sintassi specifica per SQLite?
Soluzione
UPDATE non farà nulla se la riga non esiste.
Qualora l'inserire o sostituire inserirà se la riga non esiste, o sostituire i valori se lo fa.
Altri suggerimenti
Al momento sto lavorando su una tale affermazione e capito un altro fatto notare: Inserire o sostituire sostituirà i valori non forniti nella dichiarazione. Per esempio se la tabella contiene una colonna "cognome" che non ha fornito un valore per, inserire o sostituire sarà annullare il "cognome", se possibile (vincoli consentono) o fallire.
REPLACE INTO table(column_list) VALUES(value_list);
è una forma più breve di
INSERT OR REPLACE INTO table(column_list) VALUES(value_list);
Per REPLACE per eseguire correttamente la struttura della tabella deve avere righe univoche, se una semplice chiave primaria o un indice univoco.
Sostituisci consente di eliminare, quindi inserisce il record e causerà un trigger di inserimento da eseguire se si dispone di loro configurazione. Se si dispone di un trigger su INSERT, è possibile riscontrare problemi.
Questo è un lavoro intorno .. non controllato la velocità ..
INSERT OR IGNORE INTO table (column_list) VALUES(value_list);
seguito da
UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'
Questo metodo permette una sostituzione a verificarsi senza provocare un innesco.
L'inserto o sostituire interrogazione sarebbe inserire un nuovo record se id = 1 non esiste già.
La query di aggiornamento sarebbe solo oudate id = 1 se esiste aready, non sarebbe creare un nuovo record se non esistesse.