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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top