SQLite Upsert: Spiegelung der ON DUPLICATE KEY UPDATE-Funktionalität von MySQL
MySQLs ON DUPLICATE KEY UPDATE
vereinfacht das Einfügen oder Aktualisieren von Zeilen basierend auf eindeutigen Schlüsseleinschränkungen. Diese einzelne Abfrage fügt entweder eine neue Zeile ein, wenn der Schlüssel eindeutig ist, oder aktualisiert eine vorhandene Zeile, wenn ein doppelter Schlüssel gefunden wird. SQLite fehlt dieses direkte Äquivalent.
Problemumgehungen für Upserts in SQLite
SQLite bietet alternative Strategien, um das gleiche Ergebnis zu erzielen:
1. AUSWÄHLEN, dann EINFÜGEN oder AKTUALISIEREN:
Diese Methode verwendet zwei Abfragen:
SELECT
Abfrage, um zu prüfen, ob eine Zeile mit dem angegebenen Schlüssel vorhanden ist.INSERT
- oder UPDATE
-Abfrage, abhängig vom Ergebnis der SELECT
-Abfrage.Dieser Ansatz erfordert zwei Datenbankinteraktionen, die sich möglicherweise auf die Leistung auswirken.
2. UPDATE, dann INSERT bei Fehler:
Dabei handelt es sich um eine einzelne UPDATE
Abfrage mit Fehlerbehandlung:
UPDATE
zeigt eine vorhandene Zeile an und die Daten werden aktualisiert.UPDATE
(weil die Zeile nicht existiert) löst eine INSERT
-Abfrage aus.Während dies die Datenbankaufrufe auf einen reduziert, erfordert es eine zusätzliche Fehlerbehandlung für fehlgeschlagene INSERT
Versuche (z. B. aufgrund doppelter Schlüssel).
Optimale SQLite-Upsert-Strategie
Die effizienteste und robusteste SQLite-Upsert-Methode kombiniert INSERT OR IGNORE
und UPDATE
:
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
Dies erfordert eine UNIQUE
- oder PRIMARY KEY
-Einschränkung für die Spalte „ip“. Das INSERT OR IGNORE
versucht einzufügen; Wenn ein doppelter Schlüssel vorhanden ist, wird er stillschweigend ignoriert. Das nachfolgende UPDATE
erhöht dann den Trefferzähler für die vorhandene Zeile. Diese Lösung bietet sowohl Effizienz (ein einziger Datenbank-Roundtrip) als auch vermeidet Fehler durch doppelte Schlüsseleinfügungen.
Das obige ist der detaillierte Inhalt vonWie kann ich die ON DUPLICATE KEY UPDATE-Funktionalität von MySQL in SQLite erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!