Heim > Datenbank > MySQL-Tutorial > Wie kann ich MySQLs ON DUPLICATE KEY UPDATE in SQLite effizient emulieren?

Wie kann ich MySQLs ON DUPLICATE KEY UPDATE in SQLite effizient emulieren?

Linda Hamilton
Freigeben: 2025-01-15 14:09:43
Original
528 Leute haben es durchsucht

How to Efficiently Emulate MySQL's ON DUPLICATE KEY UPDATE in SQLite?

Simulation von MySQLs ON DUPLICATE KEY UPDATE in SQLite

SQLite fehlt ein direktes Äquivalent der ON DUPLICATE KEY UPDATE-Klausel von MySQL, die effiziente Aktualisierungen und Einfügungen von Datensätzen mit vordefinierten eindeutigen Einschränkungen ermöglicht. Ein ähnlicher Effekt kann jedoch auch durch alternative Methoden erzielt werden.

Alternative Methoden

Um einen Upsert in SQLite zu simulieren, gibt es zwei Hauptmethoden, die Sie verwenden können:

  1. SELECT (INSERT oder UPDATE):

    • Führen Sie eine SELECT-Abfrage aus, um zu prüfen, ob der Datensatz vorhanden ist.
    • Wenn der Datensatz vorhanden ist, führen Sie eine UPDATE-Abfrage aus, um die Trefferspalte zu erhöhen.
    • Wenn der Datensatz nicht vorhanden ist, führen Sie eine INSERT-Abfrage aus, um den Datensatz zu erstellen.
  2. UPDATE (INSERT, wenn UPDATE fehlschlägt):

    • Versuchen Sie, eine UPDATE-Abfrage auszuführen, um die Trefferspalte eines vorhandenen Datensatzes zu erhöhen.
    • Wenn die UPDATE-Abfrage fehlschlägt, weil der Datensatz nicht vorhanden ist, führen Sie eine INSERT-Abfrage aus, um den Datensatz zu erstellen.

Empfohlene Methode

Beide Methoden haben ihre Vor- und Nachteile, aber die zweite Methode (mit UPDATE (oder INSERT, wenn UPDATE fehlschlägt)) ist im Allgemeinen effizienter. Es erfordert nur einen einzigen Datenbankvorgang und vermeidet unnötige SELECT-Abfragen.

Vorgeschlagene Codeausschnitte

Hier ist ein vorgeschlagener Codeausschnitt zur Implementierung des zweiten Ansatzes unter Verwendung einer eindeutigen Einschränkung für die Spalte „ip“:

<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
Nach dem Login kopieren

Alternativ bietet der folgende Codeausschnitt einer anderen Stack Overflow-Lösung eine weitere funktionierende Upsert-Implementierung:

<code class="language-sql">INSERT INTO visits (ip, hits)
VALUES ($ip, COALESCE((SELECT hits FROM visits WHERE ip LIKE $ip), 0) + 1);</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich MySQLs ON DUPLICATE KEY UPDATE in SQLite effizient emulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage