suchen
HeimDatenbankMySQL-TutorialFügen Sie eine Zeile in eine Datenbank ein, die keine Primärschlüssel oder eindeutigen Einschränkungen verwendet

Upsert a row in a DB that doesn

Während meiner 7-jährigen Karriere als Programmierer habe ich die meiste Zeit über ein ORM mit SQL interagiert. Eine Funktion von Laravel's Eloquent ORM, die ich besonders nützlich finde, ist die updateOrInsert()-Methode:

DB::table('posts')
    ->updateOrInsert(
        ['slug' => 'about'], // matching condition
        ['content' => 'Like and subscribe'] // created or updated values
    );

Im obigen Beispiel sucht Eloquent nach einer Zeile in der Beitragstabelle, in der der Slug „about“ entspricht. Wenn eine Zeile mit diesem Slug vorhanden ist, aktualisiert Eloquent den Inhalt dieser Zeile auf „Gefällt mir und abonnieren“. Wenn eine Zeile mit diesem Slug nicht existiert, erstellt Eloquent eine neue Zeile mit dem Slug „about“ und dem Inhalt „Gefällt mir und abonnieren“.

Das Problem: kein Primärschlüssel oder eindeutige Einschränkungen

Ich schreibe derzeit ein Migrationsskript, um Seitendaten von einer alten WordPress-Site auf eine neue WordPress-Site zu verschieben. Das Skript stellt eine Verbindung zur Datenbank der alten Site her und erstellt dann eine SQL-Datei, die in die Datenbank der neuen Site importiert werden kann. Auf der neuen Website wurden bereits einige Seiten manuell verschoben, deren Inhalt ist jedoch möglicherweise veraltet. Wenn auf der neuen Website bereits eine Seite vorhanden ist, möchten wir sie nicht erneut erstellen: Wir möchten die bereits vorhandene Seite aktualisieren. Wir können feststellen, ob die Seite bereits existiert, indem wir die Spalte „post_name“ in der WordPress-Datenbank verwenden, die dem URL-Slug der Seite entspricht.

Wenn der Postname der Primärschlüssel wäre, könnten wir mit einer REPLACE-Anweisung etwas Ähnliches wie die Methode createOrUpdate() von Eloquent erreichen, aber der Postname ist nicht der Primärschlüssel.

Wenn der Postname eine Eindeutigkeitsbeschränkung hätte, könnten wir etwas Ähnliches wie die Methode createOrUpdate() von Eloquent mit einer INSERT ... ON DUPLICATE KEY UPDATE-Anweisung erreichen, aber der Postname hat keine Eindeutigkeitsbeschränkung.

Ah, die Freuden von WordPress.

Ich habe mir die IF-Anweisung von MySQL angesehen, aber die IF-Anweisung funktioniert nur in gespeicherten Prozeduren, Triggern und Funktionen. Ich wollte keine gespeicherten Prozeduren in der SQL-Datei erstellen, die ich in die Datenbank der neuen Site importieren würde, also musste ich nach anderen Optionen suchen.

Die Lösung: 2 Aussagen

Die einfachste Lösung, die ich finden konnte, um die Funktionalität von updateOrInsert() von Eloquent in reinem SQL zu emulieren, bestand darin, das Problem in zwei Teile zu zerlegen:

  1. Aktualisieren Sie alle vorhandenen Zeilen mit einem passenden Slug.
  2. Erstellen Sie eine neue Zeile, wenn keine Zeilen mit passenden Slugs vorhanden sind.

So sieht das in der Praxis aus:

-- Update the post if it already exists.

UPDATE wp_posts
SET post_type = 'page',
    post_title = 'About',
    post_content = 'Like and subscribe'
WHERE post_name = 'about';

-- Create a new post if it does not exist.

INSERT INTO wp_posts (post_name, post_type, post_title, post_content)
SELECT 'about', 'page', 'About', 'Like and subscribe'
WHERE NOT EXISTS (
    SELECT 1
    FROM wp_posts
    WHERE post_name = 'about'
);

HINWEIS:In diesem Beispiel werden aus Gründen der Kürze und Klarheit viele der erforderlichen wp_posts-Spalten von WordPress weggelassen.

Das Erlernen der INSERT ... SELECT-Anweisung war für mich der „Aha“-Moment. Es ist beabsichtigt, die Ergebnisse einer Abfrage aus einer anderen Tabelle zu verwenden, um viele Einfügungen gleichzeitig durchzuführen. Sie können jedoch die Funktionen von SQL nutzen und missbrauchen, indem Sie Ihre eigenen Werte bereitstellen und die Einfügung nur durchführen, wenn ein Beitrag mit dem Postnamen „about“ nicht existiert.

Ist dies die eleganteste und effizienteste Lösung für dieses Problem? Wahrscheinlich nicht. Aber es ist gut genug für eine einmalige Migration einer WordPress-Site und ermöglicht es Ihnen, eine Zeile zu aktualisieren oder einzufügen, ohne dass gespeicherte Prozeduren oder Anwendungslogik erforderlich sind. Hoffentlich hilft Ihnen dieser Beitrag beim Schreiben leistungsfähiger Abfragen ohne die Hilfe eines ORM.

Das obige ist der detaillierte Inhalt vonFügen Sie eine Zeile in eine Datenbank ein, die keine Primärschlüssel oder eindeutigen Einschränkungen verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
MySQLs Rolle: Datenbanken in WebanwendungenMySQLs Rolle: Datenbanken in WebanwendungenApr 17, 2025 am 12:23 AM

Die Hauptaufgabe von MySQL in Webanwendungen besteht darin, Daten zu speichern und zu verwalten. 1.Mysql verarbeitet effizient Benutzerinformationen, Produktkataloge, Transaktionsunterlagen und andere Daten. 2. Durch die SQL -Abfrage können Entwickler Informationen aus der Datenbank extrahieren, um dynamische Inhalte zu generieren. 3.Mysql arbeitet basierend auf dem Client-Server-Modell, um eine akzeptable Abfragegeschwindigkeit sicherzustellen.

MySQL: Erstellen Sie Ihre erste DatenbankMySQL: Erstellen Sie Ihre erste DatenbankApr 17, 2025 am 12:22 AM

Zu den Schritten zum Erstellen einer MySQL -Datenbank gehören: 1. Erstellen einer Datenbank und Tabelle, 2. Daten einfügen, und 3. Durchführen von Abfragen. Verwenden Sie zunächst die Anweisungen für erstellte und creatEtable, um die Datenbank und Tabelle zu erstellen, und verwenden Sie dann die Anweisung InsertInto, um die Daten einzulegen, und verwenden Sie schließlich die Auswahlanweisung, um die Daten abzufragen.

MySQL: Ein anfängerfreundlicher Ansatz zur DatenspeicherungMySQL: Ein anfängerfreundlicher Ansatz zur DatenspeicherungApr 17, 2025 am 12:21 AM

MySQL ist für Anfänger geeignet, da es einfach zu bedienen und leistungsfähig ist. 1.Mysql ist eine relationale Datenbank und verwendet SQL für CRUD -Operationen. 2. Es ist einfach zu installieren und erfordert, dass das Stammbenutzerkennwort konfiguriert wird. 3.. Verwenden Sie Einfügen, Aktualisieren, Löschen und Wählen Sie, um Datenvorgänge auszuführen. 4. OrderBy, wo und Join kann für komplexe Abfragen verwendet werden. 5. Debugging erfordert die Überprüfung der Syntax und verwenden Sie Erklärungen zur Analyse der Abfrage. 6. Die Optimierungsvorschläge umfassen die Verwendung von Indizes, die Auswahl des richtigen Datentyps und der guten Programmiergewohnheiten.

Ist MySQL Anfänger-freundlich? Bewertung der LernkurveIst MySQL Anfänger-freundlich? Bewertung der LernkurveApr 17, 2025 am 12:19 AM

MySQL ist für Anfänger geeignet, weil: 1) Einfach zu installieren und konfigurieren, 2) Rich Learning Resources, 3) Intuitive SQL -Syntax, 4) leistungsstarke Toolunterstützung. Anfänger müssen jedoch Herausforderungen wie Datenbankdesign, Abfrageoptimierung, Sicherheitsmanagement und Datensicherung überwinden.

Ist SQL eine Programmiersprache? Klärung der TerminologieIst SQL eine Programmiersprache? Klärung der TerminologieApr 17, 2025 am 12:17 AM

Ja, sqlisaprogrammingLuagespezialisierteForDatamanagement.1) Es ist dieklarativ, fokussierte Waagewhattoachieveratherthanhow.2)

Erklären Sie die Säureeigenschaften (Atomizität, Konsistenz, Isolation, Haltbarkeit).Erklären Sie die Säureeigenschaften (Atomizität, Konsistenz, Isolation, Haltbarkeit).Apr 16, 2025 am 12:20 AM

Säureattribute umfassen Atomizität, Konsistenz, Isolation und Haltbarkeit und sind der Eckpfeiler des Datenbankdesigns. 1. Atomizität stellt sicher, dass die Transaktion entweder vollständig erfolgreich oder vollständig gescheitert ist. 2. Konsistenz stellt sicher, dass die Datenbank vor und nach einer Transaktion konsistent bleibt. 3. Isolation stellt sicher, dass sich Transaktionen nicht stören. 4. Persistenz stellt sicher, dass Daten nach der Transaktionsuntersuchung dauerhaft gespeichert werden.

MySQL: Datenbankverwaltungssystem vs. ProgrammierspracheMySQL: Datenbankverwaltungssystem vs. ProgrammierspracheApr 16, 2025 am 12:19 AM

MySQL ist nicht nur ein Datenbankverwaltungssystem (DBMS), sondern auch eng mit Programmiersprachen zusammen. 1) Als DBMS wird MySQL verwendet, um Daten zu speichern, zu organisieren und abzurufen und Indizes zu optimieren, können die Abfrageleistung verbessern. 2) Kombinieren Sie SQL mit Programmiersprachen, eingebettet in Python, und unter Verwendung von ORM -Tools wie SQLalchemy kann die Operationen vereinfachen. 3) Die Leistungsoptimierung umfasst Indexierung, Abfrage, Caching, Bibliothek und Tabellenabteilung und Transaktionsmanagement.

MySQL: Verwalten von Daten mit SQL -BefehlenMySQL: Verwalten von Daten mit SQL -BefehlenApr 16, 2025 am 12:19 AM

MySQL verwendet SQL -Befehle, um Daten zu verwalten. 1. Grundlegende Befehle umfassen Auswahl, Einfügen, Aktualisieren und Löschen. 2. Die erweiterte Verwendung umfasst die Funktionen, Unterabfragen und Aggregate. 3. Häufige Fehler sind Syntax-, Logik- und Leistungsprobleme. 4. Die Optimierungstipps umfassen die Verwendung von Indizes, die Vermeidung von Auswahl* und die Verwendung von Limit.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion