http://en.wikipedia.org/wiki/Upsert
Inserisci Aggiorna proc memorizzato su SQL Server
Esiste un modo intelligente per farlo in SQLite a cui non ho pensato?
Fondamentalmente voglio aggiornare tre colonne su quattro se il record esiste, se non esiste voglio INSERIRE il record con il valore predefinito (NUL) per la quarta colonna.
L'ID è una chiave primaria, quindi su UPSERT sarà registrato un solo record.
(Sto cercando di evitare il sovraccarico di SELECT per determinare se devo ovviamente AGGIORNARE o INSERIRE)
Suggerimenti?
Non riesco a confermare che la sintassi sul sito SQLite per TABLE CREATE. Non ho creato una demo per testarlo, ma non sembra essere supportato ..
Se lo fosse, ho tre colonne in modo che sembrerebbe effettivamente:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
ma i primi due BLOB non causeranno un conflitto, solo l'ID sarebbe quindi Asusme Blob1 e Blob2 non sarebbero sostituiti (come desiderato)
AGGIORNAMENTI in SQLite quando i dati di associazione sono una transazione completa, il che significa che ogni riga inviata per essere aggiornata richiede: Preparare / Associare / Step / Finalizzare le istruzioni a differenza di INSERT che consente l'uso della funzione di ripristino
La vita di un oggetto statement va in questo modo:
- Crea l'oggetto usando sqlite3_prepare_v2 ()
- Associare i valori ai parametri host utilizzando le interfacce sqlite3_bind_.
- Esegui l'SQL chiamando sqlite3_step ()
- Reimposta l'istruzione usando sqlite3_reset () quindi torna al passaggio 2 e ripeti.
- Distruggi l'oggetto istruzione usando sqlite3_finalize ().
AGGIORNAMENTO Immagino sia lento rispetto a INSERT, ma come si confronta con SELECT usando la chiave primaria?
Forse dovrei usare la selezione per leggere la quarta colonna (Blob3) e quindi usare REPLACE per scrivere un nuovo record mescolando la quarta colonna originale con i nuovi dati per le prime 3 colonne?