1. Baidu-Enzyklopädie1. MySQLMySQL behauptet, die beliebteste Open-Source-Datenbank zu sein. Das M in LAMP bezieht sich auf MySQL. Auf LAMP erstellte Anwendungen verwenden MySQL, etwa WordPress, Drupal und die meisten anderen PHP-Open-Source-Programme. MySQL wurde ursprünglich von MySQL AB entwickelt und 2008 für 1 Milliarde Dollar an Sun verkauft, das 2010 von Oracle übernommen wurde. Oracle unterstützt mehrere Versionen von MySQL: Standard, Enterprise, Classic, Cluster, Embedded und Community. Einige davon können kostenlos heruntergeladen werden, andere sind kostenpflichtig. Der Kerncode basiert auf der GPL-Lizenz. Da MySQL von Oracle kontrolliert wird, befürchtet die Community, dass dies Auswirkungen auf die Open Source von MySQL haben könnte. Daher wurden einige Zweige entwickelt, beispielsweise MariaDB und Percona. 2. PostgreSQLPostgreSQL bezeichnet sich selbst als die weltweit fortschrittlichste Open-Source-Datenbank. Einige Fans von PostgreSQL sagen, es sei mit Oracle vergleichbar, jedoch ohne den hohen Preis und den aufdringlichen Kundendienst. Es wurde ursprünglich 1985 an der University of California, Berkeley als Nachfolger der Ingres-Datenbank entwickelt. PostgreSQL ist ein vollständig von der Community betriebenes Open-Source-Projekt. Es bietet eine einzige voll funktionsfähige Version, im Gegensatz zu MySQL, das mehrere verschiedene Community-, Business- und Enterprise-Editionen bietet. PostgreSQL basiert auf der liberalen BSD/MIT-Lizenz, die es Organisationen ermöglicht, den Code zu verwenden, zu kopieren, zu ändern und weiterzugeben, solange sie einen Copyright-Vermerk angeben. 3. Vorteile von PostgreSQL gegenüber MySQL(1) Es handelt sich nicht nur um eine relationale Datenbank, sondern sie kann auch speichern: Arrays, egal ob Ein-Bit-Arrays oder Mehr-Bit-Arrays, unterstützen JSON (hStore) und JSONB, was viel effizienter ist als die Verwendung von Textspeichern. (2) Unterstützung der Erweiterung zur Verarbeitung geografischer Informationen (3) REST-API kann schnell erstellt werden (4) Die Unterstützung skalierbarer Indextypen wie R-Bäume erleichtert die Verarbeitung einiger spezieller Daten. Für MySQL ist die Verarbeitung baumartiger Designs sehr kompliziert und es muss viel Code geschrieben werden. PostgreSQL kann jedoch effizient mit Baumstrukturen umgehen. (5) Bessere Unterstützung externer Datenquellen (6) Es gibt keine Längenbeschränkung für Zeichenfolgen usw... 2. InsertOrUpdate-Codebeispiel in Postgres1. Erstellen Sie die BenutzertabelleTabelle erstellen public.t_user ( Benutzername varchar(100) NOT NULL, Alter int4 NICHT NULL STANDARD 0, "Passwort" varchar(100) NULL, gelöscht int4 NULL, created_time Zeitstempel NULL ); ERSTELLEN SIE EINEN EINDEUTIGEN INDEX t_user_union_name_age_password ON public.t_user USING btree (Benutzername, Passwort, Alter); 2. Einfacher Weg zum Erreicheneinfügen hinein public.t_user (Benutzername, Passwort, Alter, Erstellungszeit) Werte ('zs', '123', 18,jetzt()), ('ls', '123456', 19,jetzt()),('ww', '123', 20,jetzt()) bei Konflikten (Benutzername, Alter, Passwort) Update durchführen: Benutzername = ausgeschlossen.Benutzername,Alter = ausgeschlossen.Alter,Passwort = ausgeschlossen.Passwort,Erstellungszeit = ausgeschlossen.Erstellungszeit 3. Verwenden Sie die Unnest-Funktion zur Implementierungeinfügen hinein public.t_user (Benutzername, Passwort, Alter, Erstellungszeit) Werte (unnest(array['zs', 'ls', 'ww']), unnest(array['123', '123', '123456']), unnest(array[18, 19, 20]), unnest(array[jetzt(), jetzt(), jetzt()])) bei Konflikten (Benutzername, Alter, Passwort) Update durchführen: Benutzername = ausgeschlossen.Benutzername,Alter = ausgeschlossen.Alter,Passwort = ausgeschlossen.Passwort,Erstellungszeit = ausgeschlossen.Erstellungszeit 4. Wenn die Daten bereits vorhanden sind, tun Sie nichts3. Einführung in verwandte Schlüsselfunktionen1. aufheben (beliebiges Array) Die Funktion „Unnest“ konvertiert das Eingabearray in eine Tabelle, in der jede Spalte ein Element im entsprechenden Array darstellt. Wird hauptsächlich verwendet, um das Szenario der Konvertierung von Zeilen in Spalten abzuschließen. INSERT ON CONFLICT implementiert die PostgreSQL-Einfüge- und Aktualisierungsfunktion. Die virtuelle Tabelle EXCLUDED enthält die Datensätze, die wir aktualisieren möchten 4. Schreiben von userMapper.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.guor.dao.UserMapper"> <!-- Stapeleinfügung --> <insert id="batchInsert" parameterType="java.util.HashMap"> <include refid="batchInsertSql"></include> </einfügen> <sql id="batchInsertSql"> INSERT INTO ${map.tableInfo.schemaName}.${map.tableInfo.tableName} ( "Tabellen-ID", "Dateiname", "Erstellungszeit", <foreach-Sammlung="map.list.get(0)" index="Schlüssel" item="Wert" Trennzeichen=","> "${Schlüssel}" </foreach> ) WERTE <foreach-Sammlung="Karte.Liste" Element="Liste" Trennzeichen=","> ( ${map.tableInfo.tableId}, #{map.tableInfo.fileName}, Jetzt(), <foreach Sammlung="Liste" Index="Schlüssel" Element="Wert" Trennzeichen=","> <wählen> <wenn test="map.varcharList.contains(key)"> #{Wert} </wann> <wenn test="map.dateList.contains(key)"> TO_TIMESTAMP(#{Wert},'jjjj-MM-tt hh24:mi:ss') </wann> <sonst> ${Wert} </sonst> </wählen> </foreach> ) </foreach> </sql> <!-- Stapelaktualisierung einfügen --> <insert id="batchInsertOrUpdate" parameterType="java.util.HashMap"> <include refid="batchInsertSql"></include> zum Thema Konflikte ( Dateiname, Tabellen-ID <if test="karte.tableInfo.flag"> , "ID-Nummer" </if> ) aktualisieren Satz "table_id" = ausgeschlossen."table_id", "Dateiname" = ausgeschlossen."Dateiname", "create_time" = ausgeschlossen."create_time", <foreach-Sammlung="map.list.get(0)" index="Schlüssel" Trennzeichen=","> "${key}" = ausgeschlossen."${key}" </foreach> </einfügen> </mapper> V. InsertOrUpdate-Codebeispiel in MySQL1. Tabellenanweisung erstellenTabelle „t_user“ erstellen ( `Benutzername` varchar (255) Zeichensatz utf8 COLLATE utf8_general_ci NOT NULL, `Passwort` varchar (255) Zeichensatz utf8 COLLATE utf8_general_ci NOT NULL, `Alter` int(0) NULL DEFAULT NULL, `Adresse` varchar (255) Zeichensatz utf8 Sortiert utf8_general_ci NULL Standard NULL, `create_time` datetime(0) NULL DEFAULT NULL, `update_time` datetime(0) NULL DEFAULT NULL, `version` int(0) NICHT NULL, EINZIGARTIGER INDEX `user_union_index`(`Benutzername`, `Passwort`, `Alter`) MIT BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamisch; 2. Gewöhnliche MethodeINSERT INTO t_user (Benutzername, Passwort, Alter, Erstellungszeit) WERTE('Jetzt' ,'123456',18,JETZT()) BEIM UPDATE FÜR DUPLIZIERTE SCHLÜSSEL Benutzername='Benutzername', Passwort='123456', erstelle_zeit=jetzt() 3. BEIM UPDATE DES DOPPELTEN SCHLÜSSELS„Insert into“ bei doppeltem Schlüsselupdate bedeutet Einfügen und Aktualisieren von Daten. Wenn der Datensatz einen Primärschlüssel oder einen eindeutigen Index enthält und die Datenbank bereits Daten enthält, wird sie mit den neuen Daten aktualisiert. Wenn keine Daten vorhanden sind, ist der Effekt derselbe wie bei „Insert into“. INSERT INTO t_user (Benutzername, Passwort, Alter, Erstellungszeit, Aktualisierungszeit, Version) WERTE('zs','123',10,jetzt(),jetzt(),1) ,( 'ls' ,'123456',20,jetzt(),jetzt(),1) ,( 'ww' ,'123',30,jetzt(),jetzt(),1) BEIM UPDATE FÜR DUPLIZIERTE SCHLÜSSEL Benutzername= WERTE(Benutzername) ,Passwort=VALUES(Passwort) , Alter = WERTE (Alter) ,Aktualisierungszeit=WERTE(Aktualisierungszeit) ,Version = Version + 1 4. Ersetzen durch„Ersetzen in“ bedeutet das Einfügen und Ersetzen von Daten. Wenn der Datensatz einen Primärschlüssel oder einen eindeutigen Index enthält und die Datenbank bereits Daten enthält, werden diese durch die neuen Daten ersetzt (zuerst löschen und dann einfügen). Wenn keine Daten vorhanden sind, ist der Effekt derselbe wie bei „Einfügen in“. REPLACE INTO t_user (Benutzername, Passwort, Alter, Erstellungszeit, Aktualisierungszeit, Version) WERTE ( 'zs' ,'123',10,jetzt(),jetzt(),1) 5. Fügen Sie IGNORE ein in„insert ignore into“ bedeutet, Konflikte so weit wie möglich zu ignorieren und gewaltsam einzufügen. INSERT IGNORE INTO t_user (Benutzername, Passwort, Alter, Erstellungszeit, Aktualisierungszeit, Version) WERTE ( 'zs' ,'123',10,jetzt(),jetzt(),1) , ('Nezha','123',30,jetzt(),jetzt(),2) 6. Zusammenfassung Beim Einfügen in Werte oder Einfügen in eine Auswahl in Stapeln werden die Atomizität und Konsistenz der Transaktion eingehalten, es sollte jedoch auf das Sperrproblem beim Einfügen in eine Auswahl geachtet werden. Wenn es vorhanden ist, dient Ersteres zum Löschen und dann zum Einfügen und Letzteres zum Aktualisieren. Dies ist das Ende dieses Artikels zur Implementierung von MySQL + PostgreSQL Batch Insert oder Update. Weitere Informationen zu MySQL + PostgreSQL Batch Insert oder Update finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Einige Gedanken und Erfahrungen zum Thema Gestaltung und Erstellung von Webseiten (Websites)
>>: Detaillierte Erklärung des Linux-Kernel-Makros Container_Of
In diesem Artikelbeispiel wird der spezifische Co...
Eines der wichtigsten Merkmale eines Stylesheets ...
SpringBoot ist wie eine riesige Python, die sich ...
In MySQL können in der Datenbank fehlerhafte Zeic...
Inhaltsverzeichnis 1. Was ist Ts 2. Grundlegende ...
In diesem Artikel wird der spezifische Code von R...
SVG (Scalable Vector Graphics) ist ein Bildformat...
In diesem Artikel wird der spezifische Code für d...
Inhaltsverzeichnis 10.000 Daten gingen im Hinterg...
<br />Es gibt keine Straße auf der Welt. Wen...
1. Beschreibung des Versprechens Promise ist ein ...
Zwei Möglichkeiten zum Navigieren auf der Seite D...
Formularelemente dynamisch hinzufügen Das dynamis...
Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...
Heute bin ich beim Entwickeln auf eine Methode ge...